/// <summary> /// 重写父类的Dispose方法 /// </summary> /// <param name="disposing"></param> protected override void Dispose(bool disposing) { if (disposed) { return; } if (disposing) { // 清理子类托管资源 if (derivedManagedResource != null) { derivedManagedResource.Dispose(); derivedManagedResource = null; } } // 清理子类非托管资源 if (derivedNativeResource != IntPtr.Zero) { Marshal.FreeHGlobal(derivedNativeResource); derivedNativeResource = IntPtr.Zero; } // 调用父类的清理代码 base.Dispose(disposing); //让类型知道自己已经被释放 disposed = true; }
/// <summary> /// 非密封类修饰用protected virtual /// 密封类修饰用private /// 之所以提供这样一个受保护的虚方法,是因为考虑了这个类型会被其他类型继承的情况。 /// 如果类型存在一个子类,子类也许会实现自己的Dispose模式。受保护的虚方法用来提醒子类:必须在自己的清理方法时注意到父类的清理工作,即子类需要在自己的释放方法中调用base.Dispose方法 /// </summary> /// <param name="disposing"></param> protected virtual void Dispose(bool disposing) { if (disposed) { return; } if (disposing) { // 清理托管资源 if (managedResource != null) { managedResource.Dispose(); managedResource = null; } } // 清理非托管资源 if (nativeResource != IntPtr.Zero) { // 演示清理非托管资源代码 Marshal.FreeHGlobal(nativeResource); nativeResource = IntPtr.Zero; } // 让类型知道自己已经被释放 disposed = true; }
protected virtual void Dispose(bool disposing) { if (disposed) { return; } if (disposing) { // 清理托管资源 if (managedResource != null) { managedResource.Dispose(); managedResource = null; } } disposed = true; }