14.7 Lambda表达式是C# 3.0引入的一个结构,可用于简化C#编程的某些方面,尤其是与LINQ合并的方面。Lambda表达式一开始很难掌握,主要是因为其用法非常灵活。Lambda表达式与其他C#语言特性(如匿名方法)结合使用时尤其有用。由于本书后面才介绍LINQ,因此匿名方法是介绍Lambda表达式的佳切入点。下面首先概述一下匿名方法。

14.7.1 复习匿名方法

第13章学习了匿名方法,这是提供的内联(inline)方法,否则就需要使用委托类型的变量。给事件添加处理程序时,过程如下:

  1. 定义一个事件处理方法,其返回类型和参数匹配要订阅的事件需要的委托的返回类型和参数。

  2. 声明一个委托类型的变量,用于事件。

  3. 把委托变量初始化为委托类型的实例,该实例指向事件处理方法。

  4. 把委托变量添加到事件的订阅者列表中。

实际上,这个过程会比上述简单一些,因为一般不使用变量存储委托,只在订阅事件时使用委托的一个实例。下面是第13章使用的代码:


Timer myTimer = new Timer(100);

myTimer.Elapsed += new ElapsedEventHandler(WriteChar);

这段代码订阅了Timer对象的Elapsed事件。这个事件使用委托类型ElapsedEventHandler,使用方法标识符WriteChar实例化改委托类型。结果是Timer对象引发Elapsed事件时,就调用方法WriteChar()。传送给WriteChar()的参数取决于由ElapsedEventHandler委托定义的参数类型和Timer中引发事件的代码传送的值。实际上,如第13章所述,C#编译器可以通过方法组语法,用更少的代码获得相同的结果:


myTimer.Elapsed += WriteChar;

想要深入了解更多关于C#匿名方法和委托的内容?可以访问以下资源: