委托类型用于定义一个System.Delegate类派生的类,功能与C++中指向函数的指针功能类似,不过委托既可以指向静态方法也可以指向实例的方法。
它的最大特点是:任何类或对象中的方法都可以通过委托来调用,唯一的要求是方法的参数类型和返回类型必须与委托的参数类型和返回类型一致。
语法形式上委托类似定义一个方法,但是委托没有方法体,因为它执行的方法是在使用委托时才指定的。
1. 委托的定义:
[访问修饰符] delegate 返回类型 委托名 ([参数序列]);
<span style="font-family:Microsoft YaHei;">public delegate double MyFuction(double x);</span>
2. 通过委托调用方法:
可将方法作为实体赋值给变量,也可将方法作为委托的参数来传递。下面将方法作为参数:
<span style="font-family:Verdana;">public static double[] Apply(double[] a, MyFunction f) { double[] result = new double[a.Length]; for (int i = 0; i < a.Length; i++) { result[i] = f(a[i]); } return result; } </span>
定义一些方法:
<span style="font-family:Verdana;">public static double Square(double x) { return x * x; } //另一个类 class D1 { double y; public D2(double y) { this.y = y; } public double Multiply(double x) { return x * y; } } //具体使用 double[] a = {0.0,0.5,1.0}; double[] squares = Apply(a,Square); D1 d = new D1(2.0); double[] doubles = Apply(a,d.Multiply); </span>