我对 C# 类及其解构函数有点困惑。
我必须在构造函数中获取的类实例中使用一些事件处理程序:
public Foo(IFooHandler handler)
{
handler.Load += Load;
handler.Close += Close;
}
当 Foo 类被销毁时,我需要取消订阅该事件。我实施吗IDisposable
并在其中或在解构函数中取消订阅?我需要消耗这些事件,我无法以其他方式做到这一点。
对于其中一个类,我创建一个实例,检查进度,然后该类实例超出范围。对于另一个它留在MainForm
直到表格关闭。第一个是我担心的,因为它可能仍然引用该事件处理程序并且无法正确运行。
我不想泄漏内存。我应该何时以及如何取消订阅?
不要在析构函数中执行此操作,因为在附加事件处理程序时不会调用它:当您附加 Foo 的实例方法作为 Bar 事件的处理程序时,Bar 将保留对 Foo 的引用,因此 Foo不会被垃圾收集,并且它的析构函数不会被调用。
您应该实现 IDisposable,并显式处置您的对象
public void Dispose()
{
if (handler != null)
{
handler.Load -= Load;
handler.Close -= Close;
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)