12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
using System; namespace NCindy.Util { /// <summary> /// ҪDispose̳ͣʹ /// </summary> public abstract class AbstractDisposable : IDisposable { private bool alreadyDisposed = false; protected bool AlreadyDisposed { get { return this.alreadyDisposed; } } ~AbstractDisposable() { Dispose(false); } public void Dispose() { Dispose(true); GC.SuppressFinalize(true); } protected void Dispose(bool isDisposing) { if (alreadyDisposed) { return; } if (isDisposing) { ReleaseManagedResources(); } ReleaseUnManagedResources(); alreadyDisposed = true; } protected virtual void ReleaseManagedResources() { return; } protected abstract void ReleaseUnManagedResources(); } }