using System; public abstract class IDisposableBase : IDisposable { public virtual void Dispose() { this.Dispose(true); GC.SuppressFinalize(this); } protected virtual void Dispose(bool is_release_managed_code) { if (this.is_disposed_) { return; } this.DisposeEvent(); this.is_disposed_ = true; } protected abstract void DisposeEvent(); protected bool is_disposed_; }