{
private bool _disposed = false;
protected override void Dispose(bool isDisposing)
{
if(_disposed)
{
return;
}
try
{
if(isDisposing)
{
//釋放托管資源
}
//釋放非托管資源
_disposed = true;
}
finally
{
base
}
}
}
這樣可以確保釋放繼承鏈上所有對象的引用資源
那用Dispose方式非托管資源就是最好的方法了嗎?
其實不然
最佳方案
同時實現終結器和Dispose方式
注意這裡用到了GC
代碼如下:
public class MyResourceRelease: IDisposable
{
~MyResourceRelease()
{
Dispose(false);
}
/// 保證資源只用釋放一次
private bool _alreadyDisposed = false;
/// 用來判斷釋放資源的類別(托管和非托管)
protected virtual void Dispose(bool isDisposing)
{
if(_alreadyDisposed)
{
return;
}
if(isDisposing)
{
//釋放托管資源
}
//釋放非托管資源
_alreadyDisposed = true;
}
public void Dispose()
{
Dispose(true);
//阻止GC把該對象放入終結器隊列
GC
}
}
[
From:http://tw.wingwit.com/Article/program/net/201311/15536.html