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
  } 

相关文章:

  • 2022-12-23
  • 2021-08-20
  • 2021-12-06
  • 2021-06-05
  • 2021-12-19
  • 2021-09-29
  • 2022-02-05
  • 2021-05-21
猜你喜欢
  • 2021-11-03
  • 2021-07-31
  • 2021-12-29
  • 2021-08-25
  • 2022-01-12
  • 2022-12-23
  • 2021-12-13
相关资源
相似解决方案