C#:委托 与 LamBda 表达式

0.

先看 一秒定时器的 触发事件就是用委托来实现的,如下:

            Timer myTimer = new Timer(1000);
            myTimer.Enabled = true;

            //public delegate void ElapsedEventHandler(object sender, ElapsedEventArgs e); 
            //public event ElapsedEventHandler Elapsed;

            //+=右边    其实是一个委托对象    (委托对象匿名)
            myTimer.Elapsed += new ElapsedEventHandler(PrintOne);

            //上面与下面等价  
            //+=右边    其实是一个委托对象    (委托对象实名)
            ElapsedEventHandler WT;
            WT = PrintTWO;
            myTimer.Elapsed += WT;

            //上面与下面等价
            //匿名类型委托
            myTimer.Elapsed += delegate (object sender, ElapsedEventArgs e) {
                Console.WriteLine(3+"");
            };

            //Lambda表达式使用 上面与下面等价
            myTimer.Elapsed += (sender,e) => {
                Console.WriteLine(4 + "");
            };

            //Lambda表达式使用 上面与下面等价
            //可以省略 => 右边的一对大括号
            //()内的参数类型,要么都不写,要么都写
            myTimer.Elapsed += (object sender, ElapsedEventArgs e) => {
                Console.WriteLine(5 + "");
            };


//每隔一秒 打印1,2,3,4,5

--------------------------------------------------------------------
        private static void PrintOne(object sender, ElapsedEventArgs e) {
            Console.WriteLine(1+"");
        }
        private static void PrintTWO(object sender, ElapsedEventArgs e) {
            Console.WriteLine(2 + "");
        }

1.

自己定义一个委托,用于计算两个数的加减乘的运算,然后使用,如下:

        public delegate int jisuan(int a , int b);

        public static void getResult(int one , int two ,jisuan js) {
            int result = js(one , two);
            Console.WriteLine(result);
        }
            //下面要多定义三个函数,太麻烦
            //getResult(1,2,new jisuan(加法函数));
            //getResult(1,2,new jisuan(减法函数));
            //getResult(1,2,new jisuan(乘法函数));

            //下面使用Lambda表达式,不用多写三个函数
            //如果写return , => 右边就必须加大括号,不写return 不用加大括号
            //至于 =>左边的 (),只有当只有一个参数的时候,可写可不写,其余时候都要写。没有参数,则用空的()
            getResult(1, 2, delegate(int a, int b) {
                return a + b;
            });
            getResult(1,2 , (a,b) => {
                return a - b;
            });
            //与下面等价
            getResult(1, 2, (a, b) => 
                a - b
            );
            getResult(1, 2, (int a, int b) => {
                return a*b;
            });
            //与下面等价
            getResult(1, 2, (int a, int b) => 
                a * b
            );

            //用法与下面等价
            jisuan addjs = (a,b) => a+b ;
            jisuan mutijs = (int a, int b) => a* b ;
            int result_add = addjs(1,2);
            int result_muti = mutijs(1,2);

猜你喜欢

转载自blog.csdn.net/qq_38261174/article/details/86469552