【发布时间】:2019-04-12 16:00:57
【问题描述】:
我有一个实现 Disposable 模式的 A 类,以释放非托管资源,例如取消订阅事件。 B 类使用 A 类,但没有将其包装在 using {..} 块中,也没有显式调用 A.Dispose(true),因此通过标准 Dispose(false) 调用在 A 的终结器中调用 A.dispose。但是通过将 bool 参数设置为 false,非托管资源将不会被清理,即不会取消订阅已订阅的事件。终结器不应该调用 Dispose(true) 还是 B 类是否应该在某个时候显式调用 A.Dispose(true),例如在它自己的终结器中?
private bool _disposed = false; // To detect redundant calls
protected virtual void Dispose(bool disposing)
{
if (!_disposed)
{
if (disposing)
{
_promotionsSQLTableDependency.Stop();
_awardsSQLTableDependency.Stop();
_progressiveGeneratorService.OnProgressiveLevelsUpdate -= _progressiveUpdateHandler;
}
_disposed = true;
}
}
~PromotionHandler()
{
Dispose(false);
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
【问题讨论】:
标签: c# .net garbage-collection finalizer