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; } } 原文:http://www.cnblogs.com/jinhaoObject/p/4640840.html