3

自从我第一堂关于 C# 类的课程以来,我了解到不仅我不能Finalize()显式调用类的方法(它由垃圾收集器调用),而且我什至不允许在我的自定义类中实现它。
让我有点困惑的是,在MSDN中就像这里 -

By default, the Object.Finalize method does nothing. If you want the garbage collector to perform cleanup operations on your object before it reclaims the object's memory, you must override this method in your class.

我发现很多地方都暗示了别的东西。谁能澄清这是为什么?

4

1 回答 1

3

在同一个 MSDN 页面中,您可以阅读:

您不能在 C#或 C++ 编程语言中覆盖 Finalize 方法。在 C# 中,使用析构函数语法来实现 Finalize 方法。在 .NET Framework 2.0 版中,C++ 提供了自己的语法来实现 Finalize 方法,如 Visual C++ 中的析构函数和终结器中所述。在早期版本中,C++ 对 Finalize 方法使用析构函数语法,就像 C# 一样。

这意味着该Finalize()方法将被垃圾收集器调用,但它被析构函数的友好语法隐藏了。您将编写的ClassName.~ClassName()内容将被ClassName.Finalize()编译器重写。

编辑
为了明确这一点,这是在 C# 中实现终结器的实际语法:

class MyClass
{
    ~MyClass()
    {
    }
}

通常你甚至不需要实现你的终结器方法(它甚至会损害性能),但你会实现Dispose 模式

于 2012-07-17T07:56:34.700 回答