public class MyResourceHog : IDisposable
{ // 已经被处理过的标记
private bool _alreadyDisposed = false;
// 终结器。调用虚拟的Dispose方法
~MyResourceHog() { Dispose( false );
} // IDisposable的实现
// 调用虚拟的Dispose方法。禁止Finalization(终结操作)
public void Dispose()
{ Dispose( true );
GC.SuppressFinalize( true );
} // 虚拟的Dispose方法
protected virtual void Dispose( bool isDisposing )
{ // 不要多次处理
if ( _alreadyDisposed )
return;
if ( isDisposing )
{ // TODO: 此处释放受控资源
} // TODO: 此处释放非受控资源。设置被处理过标记
_alreadyDisposed = true;
} } 如果衍生类需要执行另外的清除操作,它应该实现受保护的Dispose方法: public class DerivedResourceHog : MyResourceHog
{ // 它有自己的被处理过标记
private bool _disposed = false;
protected override void Dispose( bool isDisposing )
{ // 不要多次处理
if ( _disposed )
return;
if ( isDisposing )
{ // TODO: 此处释放受控资源
} // TODO: 此处释放所有受控资源
// 让基类释放自己的资源。基类负责调用GC.SuppressFinalize( )
base.Dispose( isDisposing );
// 设置衍生类的被处理过标记
_disposed = true;
} }