2

我试图了解以下之间的区别:

someObject.SomeEventName += OnEventHappend;

private void OnEventHappened(object sender, EventArgs e)
{
}

someOBject.SomeEventName += ( o, e) => { };

是否有区别,是否以一种方式或另一种方式重要。

4

2 回答 2

3

第二个称为“lambda”。这是一种创建匿名函数的方法。

除了第二个函数没有名称,因此不能在其他任何地方使用,而第一个函数有名称并且可以在其他地方使用之外,实际上并没有任何区别。

编译器最终将在该类中创建一个类和一个方法来表示 lambda,因此从技术上讲,它会有一个名称,只是不允许您在代码中使用它。

可能需要注意的最重要的一点是 lambdas 可以关闭变量。这是 lambda 主体引用其自身范围之外的变量的地方,即:

int value = 5;

someObject.SomeEvent += (s,e) => { Console.WriteLine(value);};

使用完全命名的方法可以完成相同的功能(毕竟编译器会在某个时候将该代码重构为命名方法/对象),但最终结果将比类中的一个新方法稍微复杂一些。

于 2013-05-22T18:00:18.307 回答
1

一个明显的区别是后者是一个匿名事件处理程序,实现为 statment lambda,因此您不能在以后轻松取消订阅它。不过,它的优点是简洁。

于 2013-05-22T18:00:13.007 回答