C#委托总结-匿名方法&Lambda表达式
1,匿名方法
匿名方法可以在声明委托变量时初始化表达式,语法如下
之前写过这么一段代码:
delegate void MyDel(string value); class Program { void Print1(string value) { Console.WriteLine("方法1:{0}", value); } void Print2(string value) { Console.WriteLine("方法2:{0}", value); } void Print3(string value) { Console.WriteLine("方法3:{0}", value); } /// <summary> /// 执行委托方法 /// </summary> /// <param name="d">委托类型参数</param> /// <param name="value">委托内方法的参数</param> void PrintFun(MyDel d, string value) { d(value); } static void Main(string[] args) { Program p = new Program(); MyDel del1, del2;//声明委托变量 del1 = p.Print1; del2 = p.Print2; p.PrintFun(del1, "已运行"); p.PrintFun(del2, "已运行"); Console.ReadKey(); } }
现在可以改成这样:
delegate void MyDel(string value); class Program {/// <summary> /// 执行委托方法 /// </summary> /// <param name="d">委托类型参数</param> /// <param name="value">委托内方法的参数</param> void PrintFun(MyDel d, string value) { d(value); } static void Main(string[] args) { Program p = new Program();
//匿名方法 Console.WriteLine("\n运行匿名方法"); MyDel d1 = delegate(string value) { Console.WriteLine("方法1:{0}", value); }; MyDel d2 = delegate(string value) { Console.WriteLine("方法2:{0}", value); }; p.PrintFun(d1, "以匿名方法运行"); p.PrintFun(d2, "以匿名方法运行"); Console.ReadKey(); } }
2,Lambda表达式
匿名方法的简化
delegate void MyDel(string value); class Program { /// <summary> /// 执行委托方法 /// </summary> /// <param name="d">委托类型参数</param> /// <param name="value">委托内方法的参数</param> void PrintFun(MyDel d, string value) { d(value); } static void Main(string[] args) { Program p = new Program();//Lambda表达式 Console.WriteLine("\n运行Lambda表达式"); MyDel d3 = value => Console.WriteLine("方法3:{0}", value); p.PrintFun(d3, "以Lambda表达式运行"); Console.ReadKey(); } }