事件中是否总是应该使用EventHandler?

4

我一直在愉快地使用自定义委托类型和通用的Action委托类型编写事件,而没有认真思考我正在做什么。

我有一些不错的扩展帮助程序用于ActionEventHandler,这使我倾向于使用那些预定义的委托类型,但除此之外...

除了惯例之外,是否有其他好的理由支持EventHandlerEventHandler<T>而不是自定义委托类型或通用的Action委托类型?

3个回答

7
EventHandler<T>的主要优点在于,与为每个EventArgs成员使用一个参数相比,您可以添加其他属性到您的EventArgs而不会破坏兼容性。
我认为这是最重要的论点。能够扩展您的EventArgs而不破坏订阅代码非常好。但当然,您可以使用某种属性包参数而不是每个属性一个参数的任何签名来实现相同的效果。

然后是变异,EventHandler<Base>可转换为EventHander<Derived>,因此您可以编写一个带有参数EventArgs的EventHandler,并且它可以订阅具有更具体EventArgs的事件。

扩展方法是另一个优点,但您已经提到了。


我喜欢这些参数。我认为我倾向于使用Action<>,因为创建EventArgs类会增加额外的麻烦;下次我会更仔细地考虑我的选择 :) - Andy

2

没有,没有充分的理由。

如果你的事件不需要 EventArgs 或者 sender 对象,那么你就不需要使用 EventHandler 或者 EventHandler<T>


1

EventHandler 之所以成为惯例,是因为它支持一种统一的事件处理方式。

例如,EventHandler 总是有一个方便的 sender

在这里的经验法则是,当您使用 WinForms 并创建自定义控件或扩展例如 Form 时,确实应该使用 EventHandler。对于您自己的类:尽情发挥吧。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接