简单的委托示例

使用委托数组,遍历方法。

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;
    }
}
posted @ 2019-11-29 05:18  singhwong  阅读(191)  评论(0编辑  收藏  举报