匿名方法
要将代码块传递为委托参数,创建匿名方法则是唯一的方法。匿名方法就是为了将代码块传递为委托参数,因此也有人将其称为匿名委托。使用C#的匿名方法可以使委托及事件的代码编写更加精简、高效。一般情况下,事件注册事件处理方法,需要首先定义这个方法,如果该方法仅用于订阅特定的事件,则可使用代码更加简明的匿名方法。
示例
委托与事件中的烧水示例,Heater类不变,去掉Alarm类和Display类,使用匿名方法订阅事件修改Main方法中的代码。
Heater heater = new Heater();heater.BoilEvent += delegate (int param) //水快开时报警的匿名方法{Console.WriteLine(\"Alarm: 嘀嘀嘀,水已经{0}度了!\", param);};heater.BoilEvent += delegate (int param) // 表示水温的匿名方法{Console.WriteLine(\"Display: 水快烧开了,当前温度:{0}度!\", param);};heater.BoilWater();Console.ReadKey();/*** Alarm: 嘀嘀嘀,水已经97度了!* Display:水快烧开了,当前温度:97度。* Alarm: 嘀嘀嘀,水已经98度了!* Display:水快烧开了,当前温度:98度。* Alarm: 嘀嘀嘀,水已经99度了!* Display:水快烧开了,当前温度:99度。* Alarm: 嘀嘀嘀,水已经100度了!* Display:水快烧开了,当前温度:100度。*/
lambda表达式
lambda表达式是一种可用于创建委托或表达式目录树类型的匿名函数。通过使用lambda表达式,可以写入可作为参数传递或作为函数调用值返回的本地函数。lambda表达式对于编写LINQ查询表达式特别有用。若要创建lambda表达式,需要在lambda运算符 => 左侧指定输入参数(如果有),然后在另一侧输入表达式或语句块。
联想理解:类似于ES6的箭头函数
示例:使用lambda表达式实现委托,进行数组排序。
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Linq.Expressions;namespace LambdaTest{class Program{public delegate bool SortDelegate(int[] x); // 定义委托SortDelegatestatic void Main(string[] args){int[] arr = new int[] { 8, 9, 2, 1, 4, 3 };Console.WriteLine(\"排序前的数组:\");foreach (int i in arr) Console.Write(i); // 892143Console.WriteLine();// 用lamdba表达式实例化委托SortDelegate myDelegate = array =>{for (int i = array.GetUpperBound(0); i >= 0; i--){// 冒泡排序for (int j = 0; j <= i; j++){if (array[j] <= array[i]){int temp = array[j];array[j] = array[i];array[i] = temp;}}}return true;};myDelegate(arr);Console.WriteLine(\"排序后的数组:\");foreach(int i in arr) Console.Write(i); // 984321Console.ReadKey();}}}
- 点赞
- 收藏
- 分享
- 文章举报
Yeats.NeverGiveUp发布了12 篇原创文章 · 获赞 0 · 访问量 160私信关注