C#使用多播委托应该注意的问题
(1)多播委托的委托方法最好是没有返回值的方法,也就是void方法,如果委托了带有返回值的方法也无法获得级联的结果。
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; //委托静态方法,不需要类的实例
p+= MyDeClass.sub;
int result=p(4,6);
Console.WriteLine(“结果是{0}”,result) ;
}
}
}
结果是-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(“调用委托a:”); a(“A”);
Console.WriteLine(“调用委托b:”); b(“B”);
Console.WriteLine(“调用委托c:”); c(“C”);
Console.WriteLine(“调用委托d:”); d(“D”);
}
}
}
结果是:
调用委托a:
Hello,A!
调用委托b:
Goodbye,B!
调用委托c:
Hello,C!
Goodbye,C!
调用委托d:
Goodbye,D!
点击加载更多评论>>