委托的小例子(基本委托,匿名方法,lambda)

    //0、没有返回值,也没有参数的委托
    delegate void MyDelEmpty();
    //1、没有返回值,有一个参数的委托(用于基本的实例)
    delegate void MyDel(int x);
    //2、带有返回值,有一个参数的委托(用于匿名方法)
    delegate int MyDelWithReturn(int x);
    //3、带有返回值,有多参数的委托(用于lambda)
    delegate int MyDelWithReturnAndMultiParams(int x, int y);
    class Program
    {
        //没有返回值的方法
        static void MyDelFunc(int x)
        {
            Console.WriteLine(x);
        }
        static void Main(string[] args)
        {
            //1、最基本的委托实例
            //这个委托会调用与委托相同签名的方法(相同的返回类型和参数类型及参数数量)
            Console.WriteLine("Delegate with basic");
            MyDel myDel = new MyDel(MyDelFunc);
            myDel(2);
            Console.WriteLine("Delegate with anonymous method");
            //2、匿名方法
            //匿名方法不会显式地声明返回值,但实现代码本身的行为必须通过返回一个在类型上与委托返回类型相同的值来匹配委托的返回类型。如果委托本身是void返回类型,匿名方法就不能返回值。
            //匹配带有返回值的委托
            MyDelWithReturn myDelWithReturn = delegate (int x) { return x + 20; };
            Console.WriteLine(myDelWithReturn(2));
            //匹配没有返回值的委托
            MyDel mydel2 = delegate (int x) { Console.WriteLine(x); };
            mydel2(2);
            //3、lambda
            //匹配没有返回值有参数的lambda表达式
            MyDel lambda1 = x => Console.WriteLine(x);
            lambda1(1);
            //匹配有返回值有参数的lambda表达式
            MyDelWithReturn lambda2 = x => x + 2;
            Console.WriteLine(lambda2(1));
            //匹配没有参数的lambda表达式
            MyDelEmpty lambda3 = () => Console.WriteLine("no return,no parameter");
            lambda3();
            //匹配多参数的lambda表达式
            MyDelWithReturnAndMultiParams lambda4 = (x, y) => x + y;
            Console.WriteLine($"{lambda4(2, 3)}");
            Console.ReadLine();
        }
    }

 

posted @ 2020-06-15 14:11  NicolasLiaoRan  阅读(219)  评论(0编辑  收藏  举报