什么是匿名函数?
所谓匿名函数就是没有方法名用Delegate代替 一般结构为:delegate(参数){};
一般用于方法值执行一次时。
我们用匿名函数的方法在实现上次的委托代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
public delegate string DelFunction1(string name);//委托的签名必须跟方法一样 class Program { static void Main(string[] args) { //1.将字符串每个数组中的元素都转换成大写 //2.将字符串每个数组中的元素都转换成小写 //3.将字符串每个数组中的元素两边都加上双引号 string[] name = { "asdasd", "HHbYhsdJ", "kjjjJGg" }; Midlle1(name, delegate(string names)//传到匿名函数的参数不能一样 { return names.ToUpper(); }); for (int i = 0; i < name.Length; i++) { Console.Write(name[i]); } Console.ReadKey(); } public static void Midlle1(string[] name, DelFunction1 sa)//sa里面装的转大写、转小写、加引号 { for (int i = 0; i < name.Length; i++) { name[i] = sa(name[i]); } } } |
再看一个简单点的案例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
public delegate void dele(string name); class Program { static void Main(string[] args) { //Text("张三", Chinese); //Console.ReadKey(); dele sa = Chinese;//创建一个委托对象的方法Text方法就可以省略 sa("张三"); Console.ReadKey(); } //public static void Text(string name,dele de) //{ // de(name); //} public static void Chinese(string name) { Console.WriteLine(name + "早上好"); } public static void English(string name) { Console.WriteLine(name+"Hello word"); } } |
用匿名函数实现:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
public delegate void dele(string name); class Program { static void Main(string[] args) { //Text("张三", Chinese); //Console.ReadKey(); //dele sa = Chinese;//创建一个委托对象的方法Text方法就可以省略 dele sa=delegate(string name){ Console.WriteLine("早上好" + name); }; sa("三"); Console.ReadKey(); } //public static void Text(string name,dele de) //{ // de(name); //} //用匿名函数之后具体的方法就可以省略 //public static void Chinese(string name) //{ // Console.WriteLine(name + "早上好"); //} //public static void English(string name) //{ //Console.WriteLine(name+"Hello word"); //} } |
在用lambda的方式实现:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
public delegate void dele(string name); class Program { static void Main(string[] args) { //dele sa=delegate(string name){//用匿名函数的方法 // Console.WriteLine("早上好" + name); //}; //sa("张三"); dele sa=(string name)=>{Console.WriteLine("早上好"+name);};//用lambda的方式实现 sa("张三"); Console.ReadKey(); } } |