我正在努力理解:
之间的区别someObject.SomeEventName += OnEventHappend;
private void OnEventHappened(object sender, EventArgs e)
{
}
和
someOBject.SomeEventName += ( o, e) => { };
是否存在差异并且这种方式或其他方面都很重要。
答案 0 :(得分:3)
第二个被称为“lambda”。这是一种创建匿名函数的方法。
除了第二个函数没有名称,因此不能在其他任何地方使用的事实,而第一个确实有一个名称而可以在其他地方使用,那里实际上没有任何差异。
编译器最终会在该类中创建一个类和一个方法来表示lambda,所以从技术上讲它将有一个名称,你不能在代码中使用它。
可能最重要的一点是lambda可以关闭变量。这就是lambda体在其自身范围之外的可变性,即:
int value = 5;
someObject.SomeEvent += (s,e) => { Console.WriteLine(value);};
使用完全命名的方法可以完成相同的功能(在所有编译器将在某些时候将该代码重构为命名的方法/对象之后),但最终结果将比类中的一个新方法稍微复杂一些。 / p>
答案 1 :(得分:1)
一个显而易见的区别是,后者是一个匿名事件处理程序,作为一个statment lambda实现,所以你不能轻易取消订阅它。它的优点是它的简洁。