跳到正文

【C#进阶】 委托的三种写法和拉姆达表达式的写法总结

下面是笔者总结的委托的三种写法,以供大家参考学习: using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApp1 { //在这里申明了三个委托 public delegate void DelProcess1(); public delegate void DeleProcess2(string str); public delegate string DeleProcess3(string str); class Class16 { static void Main(string args) { //在这里来使用委托 //方法一: DelProcess1 del11 = delegate () { }; DelProcess1 del12 = Test1; DelProcess1 del13 = () => { }; //方法二 DeleProcess2 del21 = delegate (string str) { }; DeleProcess2 del22 = Test2; DeleProcess2 del23 = (name) => { }; //方法三: DeleProcess3 del31 = delegate (string str) { return ""; }; DeleProcess3 del32 = Test3; DeleProcess3 del33 = (name) => { return ""; }; } static void Test1() { } static void Test2(string str) { } static string Test3(string str) { return ""; } } } 委托使用过程中的要点: namespace ConsoleApp1 { //定义一个委托 public delegate void DelSayHi(string name); class 委托 { static void Main(string args) { //作用:委托可以实现把一个函数当做是参数来传递 //Thread th = new Thread(Method); //委托类型 //List list = new List() { 1, 2, 3, 4 }; //移除list集合中大于2的所有元素 //list.RemoveAll(number => number > 2); //如何通过SayHello,根据不同的name来实现不同的函数调用? //【要点】函数可以赋值给一个委托对象,但是委托的签名必须跟函数的签名一致(也就是参数和返回值要一样哈) DelSayHi del1 = SayHelloChinese;//new DelSayHi(SayHelloChinese); //这里我们把函数作为参数来传递 DelSayHi del2 = SayHelloEnglish; //new DelSayHi(SayHelloEnglish); //通过这个委托可以把“战三” 这个字符串作为参数,传递给SayHelloChinese这个函数 del1("战三"); del2("王五"); //函数可以直接赋值给为委托(这里可以看做是多态)------大大提高了程序的扩展性 SayHello("ABCDEFGH", SayHelloChinese); SayHello("ABCDEFGH", SayHelloEnglish); /* //这实际上就是一个函数, 但是这个函数没有名字, 只有返回值 delegate (string name) { Console.WriteLine("Hello haha " + name); } */ //通过匿名函数来使用委托 SayHello("乌龟哦", delegate (string name) { Console.WriteLine("Hello haha " + name); }); //拉姆达表达式 SayHello("王五", (name) => { Console.WriteLine("Hello hahahahahah" + name); }); Console.ReadKey(); } static void Method(string name) { } //通过委托来实现不同函数的调用(委托用于定义函数的类型) // 可以把委托看做是-----》函数的父类 static void SayHello(string name, DelSayHi del) { //这里的del实际上就是委托类型 del(name); } //这里的name形参可以就是通过委托传递过来的参数 static void SayHelloChinese(string name) { Console.WriteLine("你好哈" + name); } static void SayHelloEnglish(string name) { Console.WriteLine("Hello" + name); } } }

评论

填写昵称与邮箱即可评论,无需登录。

推荐阅读