Skip to content

Instantly share code, notes, and snippets.

@madd0
Created June 12, 2012 20:57
Show Gist options
  • Save madd0/2920093 to your computer and use it in GitHub Desktop.
Save madd0/2920093 to your computer and use it in GitHub Desktop.
Implement IDispoable Correctly
// From http://msdn.microsoft.com/library/ms244737.aspx
public class Resource : IDisposable
{
private IntPtr nativeResource = Marhsal.AllocHGlobal(100);
private AnotherResource managedResource = new AnotherResource();
// Dispose() calls Dispose(true)
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
// NOTE: Leave out the finalizer altogether if this class doesn't
// own unmanaged resources itself, but leave the other methods
// exactly as they are.
~Resource()
{
// Finalizer calls Dispose(false)
Dispose(false);
}
// The bulk of the clean-up code is implemented in Dispose(bool)
protected virtual void Dispose(bool disposing)
{
if (disposing)
{
// free managed resources
if (managedResource != null)
{
managedResource.Dispose();
managedResource = null;
}
}
// free native resources if there are any.
if (nativeResource != IntPtr.Zero)
{
Marshal.FreeHGlobal(nativeResource);
nativeResource = IntPtr.Zero;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment