[我眼中的C#]委托和Lambda表达式 客官°小女子只卖身不卖艺 2022-09-30 00:52 1阅读 0赞 委托是 C\#用来传递方法的引用的语法,和类相同,委托调用之前也要经过定义和声明的过程 private delegate string GetString(); static void Main(string[] args) { ////委托是一个类型,这个类型可以赋值一个方法的引用 ////ToString()是object类型的方法 //int x = 40; ////GetString a=new GetString(x.ToString);//没有括号,说明没有调用这个方法,只是传递一个引用 //GetString a = x.ToString; ////string s = a(); //string s = a.Invoke(); //Console.WriteLine(s);//通过委托类型调用一个方法,跟直接调用一个方法是一样的 //使用委托类型作为方法的参数 PrintString method = Method1; PrintStr(method); method = Method2; PrintStr(method); Console.ReadKey(); } private delegate void PrintString(); static void PrintStr(PrintString print) { print(); } static void Method1() { Console.WriteLine("Method1"); } static void Method2() { Console.WriteLine("Method2"); } 使用委托可以先创建匿名方法,但是C\#提供了更为简单的方法—Lambda表达式 //Lambda表达式用来代替一个匿名方法,所以一个lambda也是定义了一个方法 Func<int, int, int> plusFunc = (arg1, arg2) =>//lambda表达式的参数是不要声明类型的 { return arg1 + arg2; }; Console.WriteLine(plusFunc(9,6)); Func<int, int> testFunc = a => a+1;//lambda表达式的参数只有一个的时候可以不加上括号,当函数体的语句只有依据的时候,可以不加上大括号,也可以不加上return语句 Func<int, int> test2Func = (a) => { return a + 1; }; Console.ReadKey();
还没有评论,来说两句吧...