如果事件处理程序始终用于事件? [英] Should EventHandler always be used for events?

查看:93
本文介绍了如果事件处理程序始终用于事件?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经写欢快地使用自定义委托类型和通用动作委托类型的事件,没有真正思考我在做什么。

I've been merrily writing events using custom delegate types and the generic Action delegate type, without really thinking about what I was doing.

我对动作了一些不错的扩展佣工事件处理程序这使我倾向于使用这些预定义的委托类型,而不是我自己的,但除了...

I have some nice extension helpers for Action and EventHandler which makes me tend to use those predefined delegate types rather than my own, but aside from that...

是否有其他比常规赞成一个很好的理由事件处理程序事件处理程序< T> 在自定义的委托类型或通用动作委托类型

Is there a good reason other than convention to favour EventHandler and EventHandler<T> over custom delegate types or generic Action delegate types?

推荐答案

签名的主要优点事件处理程序< T> 在使用一个参数每成员的 EventArgs的是您可以在不破坏兼容性,在 EventArgs的添加附加属性。

IMO这是最重要的参数。能够程度上你的 EventArgs的不破认购代码是非常好的。当然,你可以实现与使用某种财产包的参数,而不是每个属性参数的任何签名相同。

The main advantage of the signature EventHandler<T> over using one parameter for each member of your EventArgs is that you can add additional properties to your EventArgs without breaking compatibility.
IMO this is the most important argument. Being able to extent your EventArgs without breaking subscribing code is very nice. But of course you can achieve the same with any signature that uses some kind of property-bag parameter instead of a parameter per property.

再有就是方差,事件处理程序和LT;基地> 可转换为 EventHander<衍生> ,所以你可以写带参数的事件处理程序的EventArgs ,它可以订阅到有更具体的 EventArgs的

Then there is variance, EventHandler<Base> is convertible to EventHander<Derived>, so you can write an EventHandler with parameter EventArgs and it can subscribe to events which have more specific EventArgs.

扩展方法事件另外再加上,但你已经提到了。

Extension methods are another plus, but you already mentioned that.

这篇关于如果事件处理程序始终用于事件?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆