C#委托、事件和Lambda表达式(3)
1.匿名方法
从之前的示例可以看出当一个调用者想监听传进来的事件时,它必须定义一个唯一的与之相关联委托签名匹配的方法。
但这个方法很少会被调用委托之外的任何程序所调用,从而显得有点繁琐不受欢迎。
为了解决这一情况,现在可以在事件注册时直接将一个委托与一段代码相关联,修改之前的Program类中的委托的调用如下:
//注册事件处理程序作为匿名方法
c1.AboutToBlow += delegate { Console.WriteLine("Eek ! goning too fast"); };
c1.Exploded += delegate (object sender, CarEventArgs e) { Console.WriteLine("The Message from car is {0}", e.msg); };
注意上面第一段代码没有参数,严格来说我们不需要接收指定事件发送的传入参数,如果想使用可能传入的参数,需要通过委托类型指定参数原型(如第二段代码)
2.Lambda表达式
Lambda表达式用更简单的方式来写匿名方法,彻底简化了对.NET委托类型的应用
Lambda表达式编写规则如下:
ArgumentsToProcess => StatementsToProcessThem
(1) 首先定义一个参数列表
(2) ‘=>’ 标记紧随其后
(3)处理这些参数的语句
3.使用Lambda表达式修改上述示例如下
c1.AboutToBlow += (sender,e) => { Console.WriteLine(e.msg); }