如果对象要控制非托管的资源,显示释放还是需要的,对非托管资源的隐式控制是由析构方法提供的。
~MyClass (0
{
//进行实际操作
}
protected override void Finalize ()
{
try
{ // 进行实际操作
}
finally
{
base.Finalize ();
}
}
显示调用析构方法是不合法的,析构方法都要由垃圾回收器调用。如果要处理昂贵的非托管资源(如文件句柄),需要尽快关闭和清除它们,应该实现IDisposable接口。IDisposable接口要求实现者定义一个名为Dispost ()的方法。
停止垃圾回收器,应调用静态方法GC.SuppressFinalize (),将对象的this指针传给它,然后析构方法调用Dispose ()方法。
using System;
Class Testing : IDisposable
{
bool is_disposed = false;
protectedvirtual void Dispose (bool disposing)
{
if ( disposing)
{
console.writeLine ( "Not in destructor,OK to reference other objects");
}
//为这个对象进行清除
console.writeline("disposing...");
}
this.is_disposed = true;
}
public void Dispose ()
{
Dispose(true);
//告诉GC不要终结
GC.SuppressFinalize(this);
}
~Testing()
{
Dispose (false);
console.writeline("in destructor.");
}
}