C# 自定义事件处理程序与事件处理程序<;EventArgs>;

C# 自定义事件处理程序与事件处理程序<;EventArgs>;,c#,events,handlers,C#,Events,Handlers,最近我一直在想,这段代码之间是否有任何显著的区别: public event EventHandler<MyEventArgs> SomeEvent; 他们都做同样的事情,我没能分辨出任何区别。 尽管我注意到.NET Framework的大多数类对其事件使用自定义事件处理程序委托。有什么特别的原因吗?你说得对;他们做同样的事情。因此,您可能更喜欢前者而不是后者,因为前者更清晰,需要更少的键入 许多.NET Framework类都有自己的自定义事件处理程序委托,这是因为它们是在2.0

最近我一直在想,这段代码之间是否有任何显著的区别:

public event EventHandler<MyEventArgs> SomeEvent;
他们都做同样的事情,我没能分辨出任何区别。
尽管我注意到.NET Framework的大多数类对其事件使用自定义事件处理程序委托。有什么特别的原因吗?

你说得对;他们做同样的事情。因此,您可能更喜欢前者而不是后者,因为前者更清晰,需要更少的键入


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

第二种方式提供了更大的灵活性和类型安全性。具有相应签名=>更少错误位置的方法更少。自定义委托允许精确地指定所需的参数(或不指定任何参数)-无发送方+args cargo cult。

奇怪的是,为什么这会被否决,这似乎是自定义事件处理程序的一个完全合理的优点。
public delegate void MyEventHandler(object sender, MyEventArgs e);
public event MyEventHandler SomeEvent;