c# 匿名方法
匿名方法是在2.0版本引入的,之前声明委托的唯一方法是 "命名方法”,3.0以后引入了Lambda表达式,委托多用Lambda表达式进行声明,与Lambda表达式相比,匿名方法可以忽略参数列表(当然也是某些情况下)
1.为什么要使用匿名方法呢???
在写代码的过程当中,我们可能会经常使用到委托,比如事件,集合的查找,跨线程访问控件利用控件的Invoke方法等等,在声明委托的时候,如果我们额外定义一个方法,而这个方法只被这个委托使用的话,总会感觉
代码结构有点乱,匿名方法声明委托,就会使代码结构变得简洁,也会省去实例化的一些开销
2.匿名方法的语法:
匿名方法一般都是与委托结合使用的,委托定义以后,在声明委托的时候,可以使用匿名方法 delegate(参数) {匿名方法体;} 大括号部分就是匿名方法,一般匿名方法代码都比较少。举例子:
List<string> list = new List<string>(); list.Add("NameA"); list.Add("NameB"); list.Add("c"); list.Add("NameD"); list.FindAll(new Predicate<string>(match)); public bool match(string ss) { return ss.StartsWith("Name"); }
这是不适用匿名方法的情况,每次使用委托都要命名一个方法,代码非常不简洁。
List<string> list = new List<string>(); list.Add("NameA"); list.Add("NameB"); list.Add("c"); list.Add("NameD"); List<string> b = list.FindAll(delegate(string aa){ return aa.StartsWith("Name"); });
这是使用匿名方法的情况,代码非常简洁。 只需要在需要调用的地方定义,delegate关键字+参数列表+{语句;}
3.需要注意的是:
我们说过匿名方法可以忽略参数列表,这是有条件的,即 方法体重没有使用到参数,如果使用到,必须添加参数列表