自定义EventHandler与EventHandler <eventargs> </eventargs>

时间:2011-12-29 12:50:44

标签: c# events handlers

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

public event EventHandler<MyEventArgs> SomeEvent;

这一个:

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

他们都做同样的事情,但我无法区分。 虽然我注意到.NET Framework的大多数类都为其事件使用自定义事件处理程序委托。这是否有特定的原因?

2 个答案:

答案 0 :(得分:73)

你是对的;他们做同样的事情。因此,你应该更喜欢前者而不是后者,因为它更清晰,需要更少的打字。

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

答案 1 :(得分:0)

第二种方式提供更大的灵活性和类型安全性。具有相应签名的方法较少=&gt;少犯错误的地方。自定义委托允许指定您需要的确切参数(或不指定任何人) - 没有发件人+ args货币崇拜。