关于委托

委托(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数组开平方等等功能无法实现,还需要额外再次编写方法。

猜你喜欢

转载自www.cnblogs.com/94LH-shuai/p/8994348.html