首页 > 解决方案 > C#如何解决析构函数无法显示的问题

问题描述

代码

        using System;
        namespace Destructor
      {
        class ClassA {
            public ClassA() {
                Console.WriteLine("ClassAConstructor");
            }
            ~ClassA() {
                Console.WriteLine("ClassADestructor");
            }

        }

        class ClassB
        {
            public ClassB()
            {
                Console.WriteLine("ClassBConstructor");
            }
            ~ClassB()
            {
                Console.WriteLine("ClassBDestructor");
            }
            public void CreateObject()
            {
                Console.WriteLine("intoClassB.CreateObject()");
                ClassA classA = new ClassA();
                Console.WriteLine("outClassB.CreateObject()");
            }
        }
        class Test
        {
            static void Main(string[] args)
            {
                {
                    Console.WriteLine("intoMain");
                    ClassB classB = new ClassB();
                    classB.CreateObject();
                    Console.WriteLine("outMain");
                }

                GC.Collect();
            }

        }
    }

结果 在此处输入图像描述

intoMain ClassBConstructor intoClassB.CreateObject() ClassAConstructor outClassB.CreateObject() outMain ClassADestructor

D:\Resources\c-workspace\FristCosole\FristCosole\Destructor\bin\Debug\netcoreapp3.1\Destructor.exe(进程12796)已退出,代码为0。按任意键关闭此窗口。. .

环境: visual studio 2019
操作方式: ctrl+f5

为什么只显示 ClassA 析构函数而不显示 ClassB 析构函数?如何在控制台中看到 ClassB 析构函数?

标签: c#

解决方案


局部变量的生命周期是在声明它的局部变量范围内激活控件的生命周期。所以你的本地人一直活着,直到 main 结束。仅此一点就足以解释为什么不收集它,但这里有一些微妙之处需要我们更深入地探索。

我想你正在使用调试模式,所以你的本地仍然是根的(允许你在程序结束后检查程序)。切换到发布模式将适当地解决您的问题。


推荐阅读