1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace ConsoleApplication1 8 { 9 delegate void DelegateGreet(string name); //声明委托类型 10 class Lamda 11 { 12 public static void EnglishGreet(string name) 13 { 14 Console.WriteLine("GoodMorning!" + name); 15 } 16 17 static void Main(string[] args) 18 { 19 DelegateGreet dele1 = Lamda.EnglishGreet; //创建委托变量 并对其进行赋值 20 dele1("jack"); //调用委托方法 21 22 /*.net2.0提出的匿名方法对委托进行简化 23 这种方式和上面的方法的最大区别就是不用去再去创建委托变量 赋值 24 匿名方法就不需要写上面的东西 25 */ 26 DelegateGreet dele2 = delegate(string name) 27 { 28 Console.WriteLine("GoodMorning!" + name); 29 }; 30 dele2("jack"); 31 32 /*.net3.5提出的Lamda表达式对委托方法再次简化 33 Lamda 表达式 就是匿名方法 只是语法不同 34 * 35 * (param) =>expr param是输入参数列表 expr是一个表达式或者一系列语法 36 37 */ 38 DelegateGreet dele3 = (name1) => { Console.WriteLine("GoodMorning!" + name1); }; //圆括号里 如果是一个参数,可以省略括号,参数类型可写可不写 39 dele3("jack"); 40 /* 41 * 声明一个委托类型时候,无非就是返回值类型和参数类型不同 42 * 在.net3.5 中提供了两个专门简化委托的泛型方法 43 * Action没有参数,Action<>有参数 都不具有返回值 44 * Func,Func<> 45 * 其实上面两种那个泛型 的委托都是 系统已经给你定义好了 你直接用而已 46 * 用以再次简化委托 47 * 其实 48 */ 49 //Action<>可以加载至多16个参数,然后这样做的好处就是自己不用事先去声明委托变量,很灵活方便 50 Action<string,int > dele4 = (name1,name2) => { Console.WriteLine("GoodMorning!" + name1+"你今年"+name2+"岁了"); }; 51 dele4("jack",15); 52 53 //Func实例 没有参数 只有返回值 54 Func<string> dele5 = () => { return "没有参数只有返回值"; };// 因为只有返回值 可以把大括号去掉 55 Console.WriteLine(dele5()); 56 57 58 59 Console.Read(); 60 } 61 } 62 }
输出:
GoodMorning!jack
GoodMorning!jack
GoodMorning!jack
GoodMorning!jack你今年15岁了
没有参数只有返回值