您的位置:首页 > 编程语言 > C#

C#学习笔记(三)—–C#高级特性:匿名方法

2017-05-22 12:08 204 查看

匿名方法

匿名方法是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"); };
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐