如果对象要控制非托管的资源,显示释放还是需要的,对非托管资源的隐式控制是由析构方法提供的。

~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.");

}

}