我一直在愉快地使用自定义委托类型和通用的Action
委托类型编写事件,而没有认真思考我正在做什么。
我有一些不错的扩展帮助程序用于Action
和EventHandler
,这使我倾向于使用那些预定义的委托类型,但除此之外...
除了惯例之外,是否有其他好的理由支持EventHandler
和EventHandler<T>
而不是自定义委托类型或通用的Action
委托类型?
我一直在愉快地使用自定义委托类型和通用的Action
委托类型编写事件,而没有认真思考我正在做什么。
我有一些不错的扩展帮助程序用于Action
和EventHandler
,这使我倾向于使用那些预定义的委托类型,但除此之外...
除了惯例之外,是否有其他好的理由支持EventHandler
和EventHandler<T>
而不是自定义委托类型或通用的Action
委托类型?
EventHandler<T>
的主要优点在于,与为每个EventArgs
成员使用一个参数相比,您可以添加其他属性到您的EventArgs
而不会破坏兼容性。EventArgs
而不破坏订阅代码非常好。但当然,您可以使用某种属性包参数而不是每个属性一个参数的任何签名来实现相同的效果。
然后是变异,EventHandler<Base>
可转换为EventHander<Derived>
,因此您可以编写一个带有参数EventArgs
的EventHandler,并且它可以订阅具有更具体EventArgs
的事件。
扩展方法是另一个优点,但您已经提到了。
没有,没有充分的理由。
如果你的事件不需要 EventArgs
或者 sender
对象,那么你就不需要使用 EventHandler
或者 EventHandler<T>
。
EventHandler
之所以成为惯例,是因为它支持一种统一的事件处理方式。
例如,EventHandler
总是有一个方便的 sender
。
在这里的经验法则是,当您使用 WinForms 并创建自定义控件或扩展例如 Form
时,确实应该使用 EventHandler
。对于您自己的类:尽情发挥吧。