Thursday, December 9, 2010

How to Use IDisposable Pattern

public class DisposeObject : IDisposable
{
#region Members

private bool _disposed = false;

#endregion


#region IDisposable Members

~DisposeObject()
{
Dispose(false);
}


///
/// Dispose the current object
///

public void Dispose()
{
Dispose(true);
}


private void Dispose(bool disposing)
{
if (!_disposed)
{
if (disposing)
{
// clean up resources

CleanUp();

// The object will be cleaned up only if the method
// gets true - we are in the Dispose method.
// Therefore, you should call GC.SupressFinalize to
// take this object off the finalization queue
// and prevent finalization code for this object
// from executing a second time.
// Taken from MSDN.
GC.SuppressFinalize(this);
}
// dispose occurred
_disposed = true;
}
}

private void CleanUp()
{
// put here the code to dispose all managed
// and unmanaged resources
}

#endregion
}