C#使用多播委托應該注意的問題
(1)多播委托的委托方法最好是沒有返回值的方法,也就是void方法,如果委托了帶有返回值的方法也無法獲得級聯(lián)的結(jié)果。
using System;
namespace Proj6_10
{ delegate int mydelegate(int x, int y);//聲明委托類型,可直接在命名空間下
class MyDeClass
{ public static int add(int x, int y) {return x + y; }
public static int sub(int x, int y) {return x - y; }
static void Main( )
{
mydelegate p= MyDeClass.add; //委托靜態(tài)方法,不需要類的實例
p+= MyDeClass.sub;
int result=p(4,6);
Console.WriteLine(“結(jié)果是{0}”,result) ;
}
}
}
結(jié)果是-2。
(2)多播委托只支持“+”、“-”、“+=”和“-=”四種運算。例子:
using System;
namespace Proj6_10
{ delegate void Del(string s);//聲明委托類型,可直接在命名空間下
class TestClass
{ static void Hello(string s){Console.WriteLine(“Hello,{0}!”,s)};
static void Goodbye(string s){Console.WriteLine(“Goodbye,{0}!”,s)};
static void Main( )
{Del a,b,c,d;
a=TestClass. Hello; b=TestClass. Goodbye;
c=a+b; //建立組合委托c,是a、b兩個委托組成的委托鏈
d=c-a; //從委托鏈中去除a委托
Console.WriteLine(“調(diào)用委托a:”); a(“A”);
Console.WriteLine(“調(diào)用委托b:”); b(“B”);
Console.WriteLine(“調(diào)用委托c:”); c(“C”);
Console.WriteLine(“調(diào)用委托d:”); d(“D”);
}
}
}
結(jié)果是:
調(diào)用委托a:
Hello,A!
調(diào)用委托b:
Goodbye,B!
調(diào)用委托c:
Hello,C!
Goodbye,C!
調(diào)用委托d:
Goodbye,D!
點擊加載更多評論>>