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;
}
}