最近我一直想知道这段代码之间是否有任何显着差异:
public event EventHandler<MyEventArgs> SomeEvent;
这一个:
public delegate void MyEventHandler(object sender, MyEventArgs e);
public event MyEventHandler SomeEvent;
他们都做同样的事情,但我无法区分。 虽然我注意到.NET Framework的大多数类都为其事件使用自定义事件处理程序委托。这是否有特定的原因?
答案 0 :(得分:73)
你是对的;他们做同样的事情。因此,你应该更喜欢前者而不是后者,因为它更清晰,需要更少的打字。
许多.NET Framework类都有自己的自定义事件处理程序委托的原因是因为它们是在版本2.0中引入泛型(允许简写语法)之前编写的。例如,几乎所有的WinForms库都是在泛型之前编写的,而在那些日子里,后一种形式是唯一的做事方式。
答案 1 :(得分:0)
第二种方式提供更大的灵活性和类型安全性。具有相应签名的方法较少=&gt;少犯错误的地方。自定义委托允许指定您需要的确切参数(或不指定任何人) - 没有发件人+ args货币崇拜。