2011-12-29 125 views
60

最近我一直在想,如果有这样的代码之间的任何差别显著:自定义事件处理程序与事件处理<EventArgs>

public event EventHandler<MyEventArgs> SomeEvent; 

这一个:

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

他们都做同样的事情,我一直无法说出任何区别。 虽然我注意到大多数.NET Framework类都使用自定义事件处理程序委托来处理它们的事件。这是否有特定的原因?

回答

67

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

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

+0

谢谢你的回答。它让事情变得更加清晰。 – haiyyu 2011-12-29 12:56:37

-1

第二种方式提供了更多的灵活性和类型安全。相应签名的方法较少=>对于错误较少的地方。自定义委托允许指定您需要的确切参数(或指定任何人) - 没有发件人+参与货物崇拜。

+1

好奇为什么这是downvoted,似乎是自定义事件处理程序的完全合理的好处。 – Cerzi 2018-03-01 12:06:43