
在 C#中,委托(delegate)是一种引用类型,在其他语言中,与委托最接近的
是函数指针,但委托不仅存储对方法入口点的引用,还存储对用于调用方法的
对象实例的引用。
简单的讲委托(delegate)是一种类型安全的函数指针,首先,看下面的示例程
序,在 C++中使用函数指针。
首先,存在两个方法:分别用于求两个数的最大值和最小值。
上面两个函数的特点是:函数的返回值类型及参数列表都一样。那么,我们可
以使用函数指针来指代这两个函数,并且可以将具体的指代过程交给用户,这
样,可以减少用户判断的次数。
下面我们可以建立一个函数指针,将指向任意一个方法,代码如下所示:
定义一个函数指针,并声明该指针可以指向的函数的返回值为 类型,参
数列表中包括两个 类型的参数
*
让指针 指向 函数
利用指针调用
*
我们的问题在于,上面的代码中,为什么不直接使用 Max 函数,而是利用一个
指针指向 Max 之后,再利用指针调用 Max 函数呢?
实际上,使用指针的方便之处就在于,当前时刻可以让指针 p 指向 Max,在后
面的代码中,我们还可以利用指针 p 再指向 Min 函数,但是不论 p 指向的是谁,
调用 p 时的形式都一样,这样可以很大程度上减少判断语句的使用,使代码的
可读性增强!
在 C#中,我们可以使用委托(delegate)来实现函数指针的功能,也就是说,
我们可以像使用函数指针一样,在运行时利用 delegate 动态指向具备相同签名
的方法(所谓的方法签名,是指一个方法的返回值类型及其参数列表的类型)。
6.1 使用委托(delegate)
6.1.1 委托的建立
建立委托(delegate),过程有点类似于建立一个函数指针。过程如下:
1. 建立一个委托类型,并声明该委托可以指向的方法的签名(函数原型)
!"#$!%"#&
2.建立一个委托类的实例,并指向要调用的方法
利用委托类的构造方法指定,这是最为常见的一种方式
%"#!'%"#
- 1
- 2
- 3
前往页