匿名方法
- 匿名方法是C#2.0引入的一个功能,并通过C#3.0的lambda得到了大大的扩展。匿名方法类似于lambda表达式,但是没有lambda表达式的几个功能:
①隐式的类型确定的参数
②表达式语句(匿名方法必须是语句块的形式)
③被指定为表达式树时,转换为一个表达式树的能力 - 写匿名方法的形式是delegate关键字后面跟一个参数列表以及一个语句块:
delegate int Transformer (int i);
Transformer sqr = delegate (int x) {return x * x;};
Console.WriteLine (sqr(3)); // 9
他在语义上与下列的lambda表达式的声明是一样的
Transformer sqr = (int x) => {return x * x;};
- 匿名方法捕获外部变量时的行为与lambda表达式是一样的。
- 完全省略参数生命是匿名方法独有的特性。即使委托需要这样的参数声明。这对声明一个带有空的处理方法的事件是非常有用的:
public event EventHandler Clicked = delegate { };//这段代码可以看出,EventHandler本来是需要object和eventargs参数的,但是delegate{};可以这样写,这是匿名方法唯一的不同于lambda表达式的地方。
这样,在引发事件时就可以避免检查null值。下面的写法也是合法的:
// 省略了参数。
Clicked += delegate { Console.WriteLine ("clicked"); };