C#学习笔记---委托
一.委托的定义
1.1 .NET委托类型
(1)回调:指的是可以做为参数传给其他代码的一段可执行代码。普通调用往往是高层代码(如应用程序)去调用处在低层的函数(如系统函数、库函数)。而回调时,则是在低层函数执行时调用高层的代码。
(2)委托:在.net framework里,回调是由委托来完成的。
委托类型包含3个重要的信息:
² 它所调用的方法的名称;
² 该方法的参数(可选);
² 该方法的返回值(可选)。
1.2 使用C#定义委托
//这个委托可以指向任何传入一个整数返回两个整数的方法
Public delegate int BinaryOp(int x,int y);
在C#中创建一个委托时,需要使用 delegate 关键字。委托的名词可以自由选择,不过,必须定义委托来匹配它指向的方法的签名。
1.3 System.MulticastDelegate与System.Delegate基类
使用C#中delegate关键字创建委托的时候,也就间接声明了一个派生自System.MulticastDelegate的类。这个类使其继承类可以访问包含由委托类型维护的方法地址的列表,以及一些处理调用列表的附加方法。
我们永远不会直接派生自这些基类(如果这样做的话会有编译错误)。然而,如果我们使用delegate关键字,就间接创建一个类,这个类“是一个”MulticastDelegate。下表列举了所有委托类型都共有的核心成员。
继承成员 |
作用 |
Method |
此属性返回System.Reflection.MethodInfo类型,用以表示委托维护的静态方法的详细信息 |
Target |
如果方法调用是低定义在对象级别的(而不是静态方法),Target返回表示委托维护的方法的对象,如果Target返回值为Null,调用的方法是一个静态成员 |
Combine() |
此静态方法给委托维护的列表添加一个方法,在C#中,读者使用重载+=运算符作为简化符号调用此方法 |
GetInvocationList() |
此方法返回一个System.Delegate类型的数组,其中数组的每个元素都表示一个可调用的特定方法 |
Remove() |
此方法返回一个System.Delegate类型的数组,其中数组的每个元素都表示一个可调用的特定方法 |
RemoveAll() |
这些静态方法从调用列表中移除一个(或多个)方法。在C#中,Remove()方法可通过使用重载-=运算符来调用 |