匿名方法是C# 2.0引入的特性,并通过C# 3.0的Lambda表达式得到了极大的扩展。匿名方法类似于Lambda表达式,但是没有以下特性:
· 隐式类型的参数。
· 表达式语法(匿名方法必须是一个语句块)。
· 在赋值给 Expression<T> 时将其编译为表达式树的能力。
匿名方法的写法是在 delegate 关键字后面跟上参数的声明(可选),然后是方法体。例如:
第一行代码语义上等同于下面的Lambda表达式:
或者更简单地:
匿名方法和Lambda表达式捕获外部变量的方式是完全一样的,而且它们都可以添加 static 关键字获得静态Lambda的行为。
完全省略参数的声明是匿名方法独有的特性(即使委托需要这些参数声明),该特性尤其适用于声明一个具有空事件处理器的事件:
这样,在触发事件时就避免了 null 检查。下面的写法是合法的: