// Design pattern for a base class.
public class Base: IDisposable
{
private bool disposed = false;
//Implement IDisposable.
public void Dispose()
{
Dispose(true); <---- 1 Here
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing)
{
if (!disposed)
{
if (disposing)
{
// Free other state (managed objects).
}
// Free your own state (unmanaged objects).
// Set large fields to null.
disposed = true;
}
}
// Use C# destructor syntax for finalization code.
~Base()
{
// Simply call Dispose(false).
Dispose (false);
}
}
Run Code Online (Sandbox Code Playgroud)
我似乎没有得到第一个箭头指向的代码行(<----- 1 Here)。
我对第一个箭头感到困惑,不知道处置属于谁。到 IDisposable 或基础的虚拟 Dispose?
任何对我有帮助的帮助都很棒,非常感谢!
Dispose(true)
/的目的Dispose(false)
是让真正的代码 - the virtual void Dispose(bool)
- 知道它是通过 dispose 还是 Finalize 调用。特定Dispose(bool)
于类(虚方法);IDisposable
只有一个无参数Dispose()
方法。像这样:
Dispose(true)
路线只会被调用 via IDisposable
- 这通常意味着 viausing
Dispose(false)
路由只会通过垃圾收集器调用(请注意,一旦完成,该Dispose(true)
路线将禁用最终确定步骤)
这个布尔标志很重要,因为在最终确定期间,您无法触及任何其他托管资源(因为顺序是不确定的) - 只能触及非托管资源。事实上,这个方法virtual
意味着子类可以添加自己的清理代码。
但实际上,很少需要实现终结器。您不应该定期添加这么多样板。
归档时间: |
|
查看次数: |
583 次 |
最近记录: |