64

最近我一直想知道这段代码之间是否有任何显着差异:

public event EventHandler<MyEventArgs> SomeEvent;

和这个:

public delegate void MyEventHandler(object sender, MyEventArgs e);
public event MyEventHandler SomeEvent;

他们都做同样的事情,我无法分辨出任何区别。尽管我注意到 .NET Framework 的大多数类都使用自定义事件处理程序委托来处理它们的事件。这有什么具体原因吗?

4

2 回答 2

73

你是对的; 他们做同样的事情。因此,您可能应该更喜欢前者而不是后者,因为它更清晰并且需要更少的输入。

许多 .NET Framework 类都有自己的自定义事件处理程序委托的原因是因为它们是在 2.0 版中引入泛型(允许使用速记语法)之前编写的。例如,几乎所有的 WinForms 库都是在泛型之前编写的,而在那个时候,后一种形式是唯一的做事方式。

于 2011-12-29T12:53:22.673 回答
0

第二种方式提供了更大的灵活性和类型安全性。具有相应签名的方法更少 => 出错的地方更少。自定义委托允许准确指定您需要的参数(或不指定任何参数) - 没有 sender+args 货物崇拜。

于 2017-12-20T11:33:51.853 回答