Override this virtual method to cleanup the contained unmanaged objects.
Note that when Dispose(false) is called from the Finalizer, the order of finalization is random. In other words, contained managed objects may have been already finalized - don't reference them.