william-r
11/6/2017 - 8:31 PM

Set up disposable class

Set up a disposable class by using the IDisposable interface

public class Disposable : IDisposable{
  bool disposed = false;
  private SafeHandle resoure;
  
  public Disposable(){
    this.resoure = ... //handle resource
  }
  
  public void Dispose(){
    Dispose(true);
    GC.SuppressFinalize(this);
  }
  
  protected virtual void Dispose(bool disposing){
    if(disposed)
      return;
      
    if(disposing){
      //Free managed objects (Important)
      resource.Dispose();
    }
    //Free unmanaged object
    
    disposed = true;
  }
  
  ~Disposable(){
    Dispose(false);
  }
}
public class Disposable : IDisposable{
  bool disposed = false;
  
  protected virtual void Dispose(){
    if(disposed)
      return;
      
    //Free managed and unmanaged object
    disposed = true;
  }
}