标签:
匿名方法: 匿名方法是在初始化委托时内联(inline)声明的方法。 使用匿名方法 1.声明委托变量时作为初始化表达式。 2.组合委托时在赋值语句的右边。 3.为委托增加事件。 匿名方法的语法 1.delegate 类型的关键字 2.参数列表,若果语句块没有使用任何参数则可以省略 3.语句块,他包含匿名方法的代码 delegate (parameters){implementationcode} 关键字 参数列表 语句块 Lambda表达式 可以代替匿名方法。 把匿名方法转换为Lambda表达式: 1.删除delegate关键字; 2.在参数列表和匿名方法主体之间放Lambda表达式=>. Mydel del=delegate(int x){return x+1;};//匿名方法***注意后面的分号**** Mydel del=(int x)=>{return x+1;};//Lambda表达式 语法: (参数,参数)=>{语句或表达式} ()=>{语句或表达式} ......等格式 编译器还可以从委托的声明中知道委托参数的类型,因此Lambda表达式允许我们省略类型参数。 带有类型的参数列表称为显示类型。 省略类型的参数列表称为隐式类型。 如果只有一个隐式类型的参数,我们可以省略周围的圆括号。 Mydel del=delegate(int x){return x+1;};//匿名方法 Mydel del=(int x)=>{return x+1;};//Lambda表达式 Mydel del=(x)=>{return x+1;};//Lambda表达式 Mydel del=x=>{return x+1;};//Lambda表达式 Mydel del=x=>x+1;//Lambda表达式 Lambda表达式的参数列表要注意以下几点 Lambda表达式的参数列表中的参数必须在参数数量,类型和位置上与委托相匹配。 表达式的参数列表中的参数不一定需要包含类型(隐式类型),除非委托有ref或out参数--此时必须注明类型(显示类型) 如果没有参数,必须使用一组空的圆括号。 //命名方法 namespace ConsoleApplication1 { class Program { public static int add20(int x) { return x + 20; } delegate int otherdel(int para);//声明在类的内部 static void Main(string[] args) { otherdel del = add20; Console.WriteLine("{0}",del(5)); Console.WriteLine("{0}", del(6)); Console.ReadLine(); } } } //匿名方法 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { class Program { delegate int otherdel(int para);//声明在类的内部 static void Main(string[] args) { otherdel del = delegate(int x) { return x + 20; //返回一个整形值,和委托返回类型保持一致 };//记得这儿要加分号 if (del != null) { Console.WriteLine("{0}", del(5)); Console.WriteLine("{0}", del(6)); } Console.ReadLine(); } } } //Lambda表达式 namespace ConsoleApplication1 { class Program { delegate int otherdel(int para);//声明在类的内部 static void Main(string[] args) { otherdel del = (x) => { return x + 1; }; if (del != null) { Console.WriteLine("{0}", del(5)); Console.WriteLine("{0}", del(6)); } Console.ReadLine(); } } }
标签:
原文地址:http://www.cnblogs.com/leijiangtao/p/4200989.html