繁体   English   中英

EventHandler 与 EventHandler<TEventArgs>

[英]EventHandler vs. EventHandler<TEventArgs>

根据这里接受的答案没有区别,但在MSDN 中

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

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

我相信接受的答案和您链接的 MSDN 文档都说明了同样的事情,使用 EventHandler 或 EventHandler<"T"> (较少输入)而不是创建您自己的自定义委托。

从接受的答案来看:“......你可能更喜欢前者而不是后者,因为它更清晰,需要更少的输入。”
前者是:

public event EventHandler<MyEventArgs> SomeEvent;

来自 MSDN:对于 EventHandler 和 EventHandler<"TEventArgs"> 委托不起作用的情况,您可以定义一个委托。
定义代表是已接受答案中的“后者”:

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

在我看来,一旦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;                |
...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM