博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

C#学习笔记---委托

Posted on 2009-06-16 15:26  .NET酷  阅读(455)  评论(1编辑  收藏  举报

C#学习笔记---委托

.委托的定义... 1

1.1  .NET委托类型... 1

1.2 使用C#定义委托... 1

1.3 System.MulticastDelegateSystem.Delegate基类... 1

.最简单的委托示例... 2

.委托的定义

1.1  .NET委托类型

1回调:指的是可以做为参数传给其他代码的一段可执行代码。普通调用往往是高层代码(如应用程序)去调用处在低层的函数(如系统函数、库函数)。而回调时,则是在低层函数执行时调用高层的代码。

2委托:.net framework里,回调是由委托来完成的。

     委托类型包含3个重要的信息:

²  它所调用的方法的名称;

²  该方法的参数(可选);

²  该方法的返回值(可选)。

1.2 使用C#定义委托

//这个委托可以指向任何传入一个整数返回两个整数的方法

Public delegate int BinaryOp(int x,int y);

C#中创建一个委托时,需要使用 delegate 关键字。委托的名词可以自由选择,不过,必须定义委托来匹配它指向的方法的签名。

1.3 System.MulticastDelegateSystem.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()方法可通过使用重载-=运算符来调用

 

.最简单的委托示例

Code

 SimpleDelegate.rar