【发布时间】:2017-11-18 07:05:07
【问题描述】:
我有这个简单的代码并试图调用析构函数但我不能调用它:(
我知道 GarbageCollector 在必要时运行,所以我使用了 GC.WaitForPendingFinalizers();但它也没有工作。
这是我的代码:
class Program
{
static void Main(string[] args)
{
Calculator calculator = new Calculator();
Console.WriteLine("{0} / {1} = {2}", 120, 15, calculator.Divide(120, 15)
GC.Collect();
GC.WaitForPendingFinalizers();
Console.WriteLine("Program finishing");
}
}
class Calculator
{
// Constructor
public Calculator()
{
Console.WriteLine("Calculator being created");
}
// Public Divide method
public int Divide(int first, int second)
{
return first / second;
}
// Destructor
~Calculator()
{
Console.WriteLine("Destructor is called");
}
}
这是我的输出:
正在创建计算器
120 / 15 = 8
节目整理
我做错了什么?为什么我看不到“调用了析构函数”?
【问题讨论】:
-
C# 中的终结器不能保证运行。在我的机器上使用您的代码(VS 2017,调试,任何 CPU),运行终结器并打印“调用析构函数”。
-
规范正式称这些“析构函数”。称它们为“终结者”是常见的并且完全可以接受。细微的区别——终结器通常被认为是非确定性的,而析构函数是确定性的——在 C# 社区中完全消失了,假设 C# 程序员理解这种区别是不明智的。我可以互换使用这些术语。
标签: c# destructor finalize