c#无法显示析构函数。

using System;

namespace Destructor
{
    class ClassA {
        public ClassA() {
            Console.WriteLine("ClassA构造函数");
        }
        ~ClassA() {
            Console.WriteLine("ClassA析构函数");
        }

    }

    class ClassB
    {
        public ClassB()
        {
            Console.WriteLine("ClassB构造函数");
        }
        ~ClassB()
        {
            Console.WriteLine("ClassB析构函数");
        }
        public void CreateObject()
        {
            Console.WriteLine("进入ClassB.CreateObject()");
            ClassA classA = new ClassA();
            Console.WriteLine("退出ClassB.CreateObject()");
        }
    }
    class Test
    {
        static void Main(string[] args)
        {
            Console.WriteLine("进入Main");
            ClassB classB = new ClassB();
            classB.CreateObject();
            Console.WriteLine("退出Main");
            GC.Collect();
        }
    }
}

图片说明

为什么只显示了ClassA析构函数,ClassB析构函数不显示?

环境:visual studio 2019
图片说明

运行方式 ctrl+f5

ctrl + f5 不调试执行 图片说明

不用纠结了,C#的析构函数确实不一定会执行,和C++的析构函数机制不一样,而且官方也不推荐使用析构函数释放堆栈,一般继承IDispose接口显式调用Dispose()即可,具体可以参考Winform框架自动生成的代码的写法

这很正常,执行肯定会执行,你打断点就知道。但是如果控制台先回收,那么你看不到输出。

GC.Collect() 不一定保证能立刻回收对象。1L的代码你要注意。