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