废话不多说,上代码
namespace MyLamdba { class Program { static void Main(string[] args) { LamDbaShow.Show(); Console.ReadKey(); } } }
======
namespace MyLamdba { public delegate void OutNoResultNoPara(); //无返回值 public delegate void OutNoResultWithPara(string name, DateTime now); // public delegate int WithResultWithPara(int x, int y); public delegate string NoParaWithResult(); public class LamDbaShow { public static void Show() { //匿名函数,这里的省略了把方法名传过来,直接把传参的拿过来了,把方法名去掉了 OutNoResultWithPara method1 = new OutNoResultWithPara(delegate(string name, DateTime now) { Console.WriteLine("我是{0},现在{1}点了", name, now); }); method1.Invoke("aaaa", DateTime.Now); //====================^=^^=^^=^^=^我是漂亮的分割线……^=^^=^^=^^=^============================================= OutNoResultWithPara method2 = new OutNoResultWithPara( (string name, DateTime now) => //把delegate 关键字换成了=> 箭头的左边是参数列表,右边是方法体 { Console.WriteLine("我是{0},现在{1}点了", name, now); }); method2.Invoke("aaaa", DateTime.Now); //lamdba表达式其实就是一个匿名方法 //====================^=^^=^^=^^=^我是漂亮的分割线……^=^^=^^=^^=^============================================= OutNoResultWithPara method3 = new OutNoResultWithPara( (name, now) => //把delegate 关键字换成了=> 箭头的左边是参数列表,右边是方法体 { Console.WriteLine("我是{0},现在{1}点了", name, now); }); //去掉了参数类型,因为在进行委托的时候,约束了传入参数的类型 method3.Invoke("aaaa", DateTime.Now); //====================^=^^=^^=^^=^我是漂亮的分割线……^=^^=^^=^^=^============================================= OutNoResultWithPara method4 = ((name, now) => { Console.WriteLine("我是{0},现在{1}点了", name, now); }); //去掉了实例化委托,直接传参 method3.Invoke("aaaa", DateTime.Now); //====================^=^^=^^=^^=^我是漂亮的分割线……^=^^=^^=^^=^============================================= OutNoResultWithPara method = (s, d) => Console.WriteLine("我是{0},现在{1}点了", s, d); //去掉了大括号,前提是方法体只有一行 method.Invoke("猪猪猪", DateTime.Now); //====================^=^^=^^=^^=^我是漂亮的分割线……^=^^=^^=^^=^============================================= OutNoResultNoPara met = () => Console.WriteLine("132123"); //不传入参数的 met.Invoke(); //====================^=^^=^^=^^=^我是漂亮的分割线……^=^^=^^=^^=^============================================= WithResultWithPara WW = (x, y) => { return x + y; }; Console.WriteLine(WW.Invoke(1, 2)); WithResultWithPara WS = (x, y) => x + y; Console.WriteLine(WS.Invoke(1, 2)); //去掉了大括号,带返回值的直接去掉return 前提是方法体只有一行, //====================^=^^=^^=^^=^我是漂亮的分割线……^=^^=^^=^^=^============================================= OutNoResultNoPara sss = () => {}; //无参数无返回值,啥都没干 NoParaWithResult aa = () => "我是无参数有返回值"; Console.WriteLine(aa()); } public static void Study(string name, DateTime now) { Console.WriteLine("我是{0},现在{1}点了", name, now); } } }