IDisposable 和继承层次结构
带有应当释放的子类的基类必须按以下步骤实现 IDisposable:
-
它应提供一个公共、非虚拟 Dispose() 方法和受保护的虚拟 Dispose(Boolean disposing) 方法。
-
Dispose() 方法必须调用 Dispose(true),应禁止显示性能的终止。
-
基类型不应包括任何终结器。
以下代码片段为反射类的基配置模式。假定,类型不重写 Object.Finalize 方法。
using System; class BaseClass : IDisposable { // Flag: Has Dispose already been called? bool disposed = false; // Public implementation of Dispose pattern callable by consumers. public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } // Protected implementation of Dispose pattern. protected virtual void Dispose(bool disposing) { if (disposed) return; if (disposing) { // Free any other managed objects here. // } // Free any unmanaged objects here. // disposed = true; } }