我有一堂课:

public abstract class BaseComponent { ... }


在该类的构造函数中,我们订阅事件处理程序,例如

protected ObjectWithEventHandler eventObject { get; private set; }

public BaseComponent (ObjectWithEventHandler obj)
{
    eventObject = obj;
    eventObject.ChangedEvent += new EventHandler(eventObject_OnChangedEvent );
}

protected void eventObject_OnChangedEvent (object sender, EventArgs e) { ... }


关于EventHandler订阅和取消订阅,有任何硬性规定吗?

提供一些从EventHandler取消订阅该函数的清理代码是否被认为是一种好习惯?即实现IDisposable并从EventHandler退订呢?

还是我过分担心?

最佳答案

如果您完全控制BaseComponent的用法,并且知道EventObject的生命周期相对于BaseComponent的生命周期较短或更短*,则可以跳过取消订阅的代码。

在所有其他情况下,我将其包括在内。在这种情况下,实现IDisposable是好的样式。

*)有效地,您将eventObject的生存期与BaseComponent耦合在一起,因此它的生存期不会更短,但是当两者超出范围时,它仍然可以相等。

10-08 00:45