我的代码使用默认的 IDisposable 实现模板(模式)。
snippet:
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool isDisposing)
{
if (!this.disposed)
{
if (isDisposing)
{
//cleanup managed resources
}
//cleanup unmanaged resources
this.disposed = true;
}
}
我的问题:为什么在 Dispose 公共方法中调用“GC.SuppressFinalize(this)”?在处置托管资源之后,我会将“GC.SuppressFinalize(this)”放置在受保护方法的“if (isDisusing)”部分中。
像这样:
protected virtual void Dispose(bool isDisposing)
{
if (!this.disposed)
{
if (isDisposing)
{
//cleanup managed resources
GC.SuppressFinalize(this);
}
//cleanup unmanaged resources
this.disposed = true;
}
}
我认为这是模板设计模式的一个明显案例。
您的抽象类旨在处理所需的所有重要/必要任务(此处为 GC.SuppressFinalize(this)),并允许派生类仅覆盖代码的某些部分。
这里有2种情况:
片段 1,SuppressFinalize,在 Dispose 中
片段 2,SuppressFinalize,在 Dispose(true) 中
此处,代码片段 1 确保始终执行 GC.SuppressFinalize。而代码片段 2 则将 GC.SuppressFinalize 的执行留给了派生类.
因此,通过将 GC.SuppressFinalize 放在 Dispose 方法中,作为类的设计者,您将始终确保无论派生类编写什么代码,GC.SuppressFinalize 都将被执行。
这只是在Dispose中编写SuppressFinalize而不是Dispose(true)的好处。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)