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

来源:互联网 发布:golang microservice 编辑:程序博客网 时间:2024/05/20 18:54

匿名方法

  • 匿名方法是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"); };
阅读全文
0 0
原创粉丝点击