Dispose
Finalize
析构函数的执行顺序是怎样的?

解决方案 »

  1.   

    先执行Dispose
    最后执行Finalize
    析构函数和Finalize是同一个函数
      

  2.   


    static void Main(string[] args)
    {
        MemoryTest obj = new MemoryTest();
        obj = null;
        GC.Collect();
        GC.WaitForFullGCComplete();
        Console.ReadKey();
    }public class MemoryTest
    {
        public MemoryTest()
        {
            Console.WriteLine("MemoryTest.Construct called.");
        }    public void Finalize()
        {
            Console.WriteLine("MemoryTest.Finalizer called.");
        }
    }
    Finalize为什么没有被执行呢?
      

  3.   

    static void Main(string[] args)
    {
        MemoryTest obj = new MemoryTest();
        obj = null;
        GC.Collect();
        GC.WaitForFullGCComplete();
        Console.ReadKey();
    }public class MemoryTest
    {
        public MemoryTest()
        {
            Console.WriteLine("MemoryTest.Construct called.");
        }    ~MemoryTest()
        {
            Console.WriteLine("MemoryTest.Deconstruct called.");
        }
    }
    这样~MemoryTest可以被执行到。上面的例子Finalize为什么没有被执行呢?
      

  4.   

    Finalize不允许显式的定义。必须使用~,也就是说你自已定义的Finalize方法可能会被编译器加上别名,比如yourobject.Finalize_304EF36E_DE1F05EBBB8F之类的方法名Dispose的调用依赖于显式的调用或组件模型,不会自动执行。