【发布时间】:2011-10-20 13:38:40
【问题描述】:
我有一堂课:
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 取消订阅函数的清理代码是否被认为是一种好习惯? IE。那么实现IDisposable并取消订阅EventHandler呢?
还是我过度担心?
【问题讨论】:
-
我很确定你不需要担心这个。当您的实例被垃圾回收时,C# 应该清除所有事件引用(即不再在范围内,或者该实例不再在其他任何地方引用)
-
@musefan,这个故事有点复杂:你需要考虑所涉及对象的生命周期。
标签: c# event-handling