当前位置: 代码迷 >> 综合 >> C#:委托 与 LamBda 表达式
  详细解决方案

C#:委托 与 LamBda 表达式

热度:80   发布时间:2023-12-14 13:04:09.0

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);