C# 代理 delegate
类A 的方法m给另一个类B的对象,使得类B的对象能够调用这个方法m
1:声明一个代理对象 它应当与你想要传递的方法具有相同的参数和返回值类型
public delegate int MyDelegate(string message)
2:创建delegate 对象 并将你想要传递的函数作为参数传入
创建delegate对象的方法:
1)MyDelegate mydelegate = new MyDelegate(实例名.方法名)
2)MyDelegate mydelegate = new MyDelegate(类名.方法名)
如果代理的方法是static 静态的方法的话 用2,否则用1
3:通过代理对象调用
mydelegate(传递参数)
--
delegate 代表委托 是类型安全的并且完全面向对象的
在C#中 所有delegate 都从 System.Delegate类派生的 delegate是System.Delegate的别名
delegate 隐含具有sealed属性,不能用来派生新的类型
delegate 最大的作用就是为类的事件绑定处理程序
在通过代理调用函数前一定要检测代理是否为空 若非空,才能调用函数
在delegate实例中可以封装实例方法也可以封装静态方法
代理三步曲:
a.生成自定义代理类:delegate int MyDelegate();
b.然后实例化代理类:MyDelegate d = new MyDelegate(MyClass.MyMethod);
c.最后通过实例对象调用方法:int ret = d();
委托(Delegate) 是存有对某个方法的引用的一种引用类型变量。引用可在运行时被改变。
delegate <return type> <delegate-name> <parameter list>
一旦声明了委托类型,委托对象必须使用 new 关键字来创建,且与一个特定的方法有关。当创建委托时,传递到 new 语句的参数就像方法调用一样书写,但是不带有参数
委托的多播(Multicasting of a Delegate)
委托对象可使用 "+" 运算符进行合并。一个合并委托调用它所合并的两个委托。只有相同类型的委托可被合并。"-" 运算符可用于从合并的委托中移除组件委托。
使用委托的这个有用的特点,您可以创建一个委托被调用时要调用的方法的调用列表。这被称为委托的 多播(multicasting),也叫组播
注意:定义一个委托相当于定义一个新类