测试代码如下:-------------------------------
private void test()
{
Class1 cl1 = new Class1();
cl1.ToString();
} public class Class1
{
public Class1()
{}
~Class1()
{
MessageBox.Show("adfasdfasdf");
}
}
------------------------------------------------------------
test()执行后不会进入~Class1(), Why?

解决方案 »

  1.   

    garbage collector (没有拼错吧 ;)
      

  2.   

    析构函数由GC调用,GC只会在你的代码放弃对object的引用时才可能调用析构函数,所以跟不到里面去,因为这个对象已经不归你管了
      

  3.   

    如果你的对象会引用一些unmanaged 资源,比如,file handle 、database connection,你就必须在析构函数中实现对这些资源的释放
      

  4.   

    要想理解garbage collection,还是看看我们的大师Jeffrey Richter的大作吧:http://msdn.microsoft.com/msdnmag/issues/1100/GCI/GCI.asp
    http://msdn.microsoft.com/msdnmag/issues/1200/GCI2/GCI2.asp
      

  5.   

    如果你的程序实现IDisposable接口,则可以调用Dispose方法立即清除对象
      

  6.   

    dispose显式释放资源,析构是给gc用来释放资源的
    析构在有dispose的情况下是safe guard关于gc内容太多,这里只言片语说不明白,建议自己去看msdn
      

  7.   

    ~Class1()其实叫做Finalize()
    C#为了像C++,隐瞒了这个内容