委托(delegate)简单来说是可以将方法作为参数传递的对象,可以说是一个接口,不过约束了指向方法的签名。
示例:定义一个委托(委托和接口一样可以定义在类外部)
delegate int Wt(int x);任何返回值和参数与此委托相同的都可调用
如:
static int Double(int i){ return i*2;}
实例:
Wt wt=new Wt(Double); 或者 Wt wt=Double;
调用:
int result=wt(2); 结果 result = 4;
作用:可以实现插件式编程(减少重复性代码)
delegate int Wt(int x);
class Test{
static int Double(int i){ return i*2;}//整数double
static int Square(int i){ return i^2;}//整数开平方
static void Main(String[] args){
int[] values=[1,2,3,4];
Cj.WtCj(values,Double);
//values结果为[2,4,6,8]
Cj.WtCj(values,Square);
//values结果为[1,4,9,16]
}
}
class Cj{
public static void WtCj(int[] values,Wt wt){
for(int i = 0; i<values.length;i++){
values[i]=wt(values[i]);
}
}
}
上面的Cj是固定不变的,功能实现了整数的Double功能,相当于是一个简单的插件。
如果还不理解,假设不用委托。写法如:
class Cj{
public static void WtCj(int[] values){
for(int i = 0; i<values.length;i++){
values[i]=wt(Double([i]));//直接用方法将values数组中的数字*2
}
}
}
虽然上面一样可实现重复调用,但是也只适用于整数的Double功能。比如说对values数组开平方等等功能无法实现,还需要额外再次编写方法。