c# - 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 析构函数?
解决方案
局部变量的生命周期是在声明它的局部变量范围内激活控件的生命周期。所以你的本地人一直活着,直到 main 结束。仅此一点就足以解释为什么不收集它,但这里有一些微妙之处需要我们更深入地探索。
我想你正在使用调试模式,所以你的本地仍然是根的(允许你在程序结束后检查程序)。切换到发布模式将适当地解决您的问题。
推荐阅读
- php - Silverstripe 在导出 CSV 文件时抛出错误 500
- scala - Scala:一次映射和解压缩列表
- git - 如何在 jupyter notebook 中添加 github 图标
- javascript - 加载文件夹内容
- tfs - 在 TFS 2018 中的 Visual Studio 构建任务期间指定 DesktopPackageLocation 中的项目名称
- javascript - ES6 将组件包装在组件内
- jquery - 递归使用 jQuery .append()
- javascript - 创建用户在firebase中创建具有相同信息的身份不明的孩子
- c++ - 使用 FreeType 和 SDL2 渲染文本会生成白色方块而不是字符
- iis - IIS 中动态内容的压缩似乎不起作用