匿名方法和λ表达式

来源:互联网 发布:centos 查看网络流量 编辑:程序博客网 时间:2024/06/05 21:58

匿名方法:

在给委托类型添加事件委托时,除了定义事件处理方法之外,还可以使用匿名方法。匿名方法实际上是传统意义上不存在的方法,不是某个类上的方法,而纯粹是为用作委托目的而创建的。

匿名方法的定义语法:

delegate(parameters)

{ //Anonymous method code.

};

例如

public static void WriteChar(object source, ElapsedEventArgs e)
{
   Console.WriteLine("Event handler called after {0} milliseconds.", (source as Timer).Interval);
}

Timer myTimer = new Timer(100);
myTimer.Elapsed += new ElapsedEventHandler(WriteChar);

用匿名方法可以改写为:

Timer myTimer = new Timer(100);
myTimer.Elapsed += delegate(object source, ElapsedEventArgs e)

{
   Console.WriteLine("Event handler called after {0} milliseconds.", (source as Timer).Interval);
};

 

λ表达式是简化匿名方法的语法的一种方式。上面的代码用λ表达式重写为:

Timer myTimer = new Timer(100);
myTimer.Elapsed += (source, e) => Console.WriteLine("Event handler called after {0} milliseconds.", (source as Timer).Interval);

λ表达式分为3个部分:

1)参数定义部分

     参数可以是类型化的,如(int paramA, int paramB)

    也可以是未类型化的,如(paramA, paramB),编译器根据上下文推断出参数类型。

     但是同一个表达式的参数列表不能同时使用显示和隐式的参数类型

2) => 运算符: 把λ表达式的参数和表达式体分开

3) 表达式体:可以包含一个简单操作,如(int paramA, int paramB) => paramA + paramB

    也可以包含多个语句,放在花括号中(int paramA, int paramB) => { //multiple statements }

    可以是void型,如上面的(source, e) => Console.WriteLine("Event handler called after {0} milliseconds.", (source as Timer).Interval)

    也可以有return返回值,如(int paramA, int paramB) => { return paramA + paramB;}

原创粉丝点击