使用委托数组,遍历方法。
using System; namespace 简单的委托事例 { //定义一个委托 delegate double DoubleOp(double x); class Program { static void Main(string[] args) { //DoubleOp op1= MathOperations.MultiplyByTwo; //在这段代码中,实例化了一个DoubleOp委托的数组(记住,一旦定义了委托类,基本上就可以实例化它的实例, //就像处理一般的类那样-所以把一些委托的实例放在数组中是可行的)。该数组的每个元素都初始化为指向MathOperations类实现的不同操作。 //然后遍历这个数组,把每个操作应用到3个不同的值上。这说明了使用委托的一种方式- //把方法组合到一个数组中来使用,这样就可以在循环种调用不同的方法了。 DoubleOp[] operations = { MathOperations.MultiplyByTwo, MathOperations.Square }; for(int i = 0;i<operations.Length;i++){ System.Console.WriteLine($"Using operation{i}"); ProcessAndDisplayNumber(operations[i],2.0); ProcessAndDisplayNumber(operations[i],7.94); ProcessAndDisplayNumber(operations[i],1.414); System.Console.WriteLine(); } // Console.WriteLine("Hello World!"); } //其中传递了委托名,但不带任何参数。假定operations[i]是一个委托,在语法上: //1. operations[i]表示“这个委托”。换言之,就是委托表示的方法。 //2. operations[i](2.0)表示“实际上调用这个方法,参数放在圆括号中”。 static void ProcessAndDisplayNumber(DoubleOp action,double value){ double result = action(value); System.Console.WriteLine($"Value is {value},result of operation is {result}"); } } //定义一个类,它有两个静态方法,对double类型的值执行两种操作,然后使用该委托调用这些方法。 class MathOperations{ public static double MultiplyByTwo(double value)=>value*2; public static double Square(double value)=>value*value; } }