delegate就相当于c++中指向方法的指针。他可以实例化。
定义了一个public delegate void Add1(ref int i);我们就可以实例化Add1这个委托去指向任何一个与他返回值和传入参数相同的函数。
代码中我分别用d1和d2去指向了Add1Method和AnotherAddOne,因为这两个方法的返回值和参数都是一样的,所以Add1委托都可以指向。
委托的实例化也有两种:
Add1 a1 = new Add1(Add1Method);
Add1 a2 = Add1Method;
一个是用new,标准的 类名 实例名=new 类名(构造参数),
还有一个直接将函数赋给他形如 int i=0;
其实这两种方法是完全一样的,就看你看哪个顺眼了,根据Wrox的《Professional C# & .net 3.0》叙述,两者最后生成的中间代码是一样的。
知道了这些接下来告诉大家怎么调用,调用方法也有两种:
a1.Invoke(ref i);
a2(ref i);
前一种是调用这个delegate类的方法,后一种就像标准的函数调用一样。这两种最后的结果也是一样的。
这里不题BeginInvoke方法,这个是异步的,真要说的话应该放到线程里去讲。
最后一种是多播委托。什么是多播委托呢?很简单(本来偶也不知道的),其实就是几个委托拼在一起就变成了多播委托……=_=||
Add1 MultiAdd1 = a1 + a2;这样就把a1这个委托和a2组合其他给MultiAdd1委托,MultiAdd1就成了多播委托。其执行方式是先执行a1然后执行a2。如果你什么时候觉得a2不要了,可以用MultiAdd1 -= a2;把a2从里面去掉。够简单吧.....以下是测试代码,希望对大家有帮助。