EventHandler与EventHandler <teventargs>

时间:2017-05-01 21:18:26

标签: c# events delegates

根据accepted answer here,没有区别,但在MSDN中:

  

通常,您不必为事件声明委托,因为   您可以使用EventHandlerEventHandler<TEventArgs>   代表。您应该仅在极少数情况下声明委托,例如   使您的类可用于无法使用的遗留代码   泛型。

所以在我看来,微软强烈推荐通用的方法而不是简化版本,但是我不知道为什么或者有什么区别?

2 个答案:

答案 0 :(得分:1)

我相信已接受的答案和您链接的MSDN文档说明相同的事情,使用EventHandler或EventHandler&lt;“T”&gt; (输入的内容越少),而不是创建自己的自定义委托。

从接受的答案中说:“......你应该更喜欢前者而不是后者,因为它更清晰,需要更少的打字。”
前者是:

public event EventHandler<MyEventArgs> SomeEvent;

来自MSDN: 对于EventHandler和EventHandler&lt;“TEventArgs”&gt;的场景。代表不工作,你可以定义一个代表 从接受的答案中定义委托是“后者”:

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

答案 1 :(得分:0)

我认为,EventHandler<MyEventArgs>一旦在项目中至少发生两次,就产生了难以维护的复制和粘贴代码:

public event EventHandler<MyEventArgs> ItemBeginningEdit;                ^
public event EventHandler<MyEventArgs> ItemCommited;                     |
public event EventHandler<MyEventArgs> ItemEditCancelled;                |
...

为了保持代码的清洁,在这种情况下,您应该通过定义自己的MyEventHandler委托来抽象事件处理程序类型。如果您以后想从MyEventArgs切换到MyEventArgs2,则只需在一个地方进行更改:

public delegate void MyEventHandler(object sender, MyEventArgs2 e);
public event MyEventHandler ItemBeginningEdit;                ^
public event MyEventHandler ItemCommited;                     |
public event MyEventHandler ItemEditCancelled;                |
...