在一个将近 10 年的老系统中,我已经实现了几个IDisposable
实现。回到过去,当我还年轻而且还很愚蠢的时候,趋势是也实现一个终结器:
class MyClass: IDisposable
{
public void Dispose() { Dispose(true); }
~MyClass { Dispose(false); }
private void Dispose(bool bDisposing)
{
... dipose ...
if(bDisposing)
GC.SupressFinalize(this);
}
}
最后,在将近十年之后,这让我们感到困惑——Dispose 方法在从 finalizer 调用时抛出了一个异常,并且该进程在没有任何警告的情况下意外死亡。
我想删除所有终结器,只保留Dispose
将处理资源的方法。有什么理由保留终结者吗?没有一个对象使用非托管资源,所以我很确定我不会得到资源泄漏。正确的?