如果我使用 eventHandler 订阅同一事件三次,是否有问题?例如
a.SomethingChanged += new EventHandler(ChangeHandler);
a.SomethingChanged += new EventHandler(ChangeHandler);
a.SomethingChanged += new EventHandler(ChangeHandler);
这是否会导致调用更改处理程序 3 次而不是 1 次?处理这个问题的最佳方法是什么?
请注意,这些冗余不是在一起,而是代码路径的不同区域。
同样,取消订阅未注册的事件是否存在问题?例如
a.SomethingChanged -= new EventHandler(ChangeHandler); //ChangeHandler was never registered
如果您多次订阅一个事件,那么您的处理程序将被调用相应的次数 - 在您的示例中为三次。
这是否是一个问题取决于您的事件处理程序的作用,但我假设您不希望多次调用它。
取消订阅您尚未订阅的活动没有问题。
因此,如果您不确定应用程序处于什么状态(尽管您确实应该处于什么状态),您可以拥有:
a.SomethingChanged -= ChangeHandler;
...
a.SomethingChanged += ChangeHandler;
(注:new EventHandler(...)
为句法糖,可以省略)
如果我使用 eventHandler 订阅同一事件三次,是否有问题?
不,它只会添加事件处理程序三次。
这是否会导致调用更改处理程序 3 次而不是 1 次?
是的。
处理这个问题的最佳方法是什么?
这取决于你想要什么;你没有指定。 如果您想要一种方法来添加事件处理程序,当且仅当尚未添加它时,则只需删除事件处理程序,然后再次添加它:
a.SomethingChanged -= new EventHandler(ChangeHandler);
a.SomethingChanged += new EventHandler(ChangeHandler);
取消订阅未注册的活动是否存在问题?
不,它什么都不做。