第一种标准模板:
public class MyService : IDisposable
{
private bool _disposed = false;
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing)
{
if (_disposed) return;
if (disposing)
{
// 释放托管资源
}
// 释放非托管资源
_disposed = true;
}
~MyService()
{
Dispose(false);
}
}
第二种继承语法:
目的:演示为何要设置 虚函数 Dispose 的原因? 原因就是:子类可以先销毁自己的数据,再调用基类的Dispose,从而实现完美的销毁链条
using System.Runtime.InteropServices;
var x = new DerivedClass();
x.Dispose();
public class BaseClass : IDisposable
{
protected bool _disposed = false;
public void Dispose()
{
// 显示调用本函数时候,是BaseClass实例 还是 DerivedClass实例
// 获取当前实例的类型
Type type = this.GetType();
Console.WriteLine("1 BaseClass Dispose() called. 实例类型是->" + type.Name);
Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing)
{
Console.WriteLine("3 BaseClass Dispose(bool) called.");
if (!_disposed)
{
if (disposing)
{
// 释放托管资源
}
// 释放非托管资源
_disposed = true;
}
}
}
public class DerivedClass : BaseClass
{
protected override void Dispose(bool disposing)
{
Console.WriteLine("2 DerivedClass Dispose(bool) called.");
if (!_disposed)
{
if (disposing)
{
// 释放派生类托管资源
}
// 释放派生类非托管资源
}
base.Dispose(disposing); // 最后调用基类释放
}
}
1 BaseClass Dispose() called. 实例类型是->DerivedClass
2 DerivedClass Dispose(bool) called.
3 BaseClass Dispose(bool) called.