Dispose pattern

A quick post to show the implementation of the Dispose pattern for IDisposable implementations.

Note: this is not threadsafe

public class MyObject : IDisposable
{
   protected bool disposed;

   // only required if we need to release unmanaged resources
   ~MyObject()
   {
      Dispose(false);
   }

   public void Dispose()
   {
      Dispose(true);
      GC.SuppressFinalize(this);
   }

   protected virtual void Dispose(bool disposing)
   {
      if(!disposed)
      {
         if(disposing)
         {
            // dispose of any managed resources here
         }
         // clean up any unmanaged resources here
      }
      disposed = true;
   }
}