请参阅MSDN中的代码示例:(http://msdn.microsoft.com/en-us/library/b1yfkh5e(v=VS.100).aspx)
// Design pattern for a base class.
public class Base: IDisposable
{
private bool disposed = false;
//Implement IDisposable.
public void Dispose()
{
Dispose(true);
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);
}
}
在Dispose()实现中,它调用GC.SupressFinalize();,但提供了一个析构函数来完成对象。
调用GC.SuppressFinalize()时为析构函数提供实现有什么意义?
只是有点混淆意图是什么?
答案 0 :(得分:6)
如果有人忘记调用Dispose,终结器将(最终)运行以进行最终清理。由于最终确定会损害性能,理想情况下没有人会忘记Dispose。使用构造对此有所帮助。
答案 1 :(得分:6)
有两种情况: