为什么MSDN提到覆盖Finalize()方法?

时间:2012-07-17 07:53:40

标签: c# msdn finalize

自从我第一次学习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.

我发现很多地方都提出了别的建议。谁能澄清为什么会这样?

1 个答案:

答案 0 :(得分:3)

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

  

您无法覆盖C#或C ++编程语言中的Finalize方法。 在C#中,使用析构函数语法来实现Finalize方法。在.NET Framework 2.0版中,C ++提供了自己的语法来实现Finalize方法,如Visual C ++中的Destructors和Finalizers中所述。在早期版本中,C ++使用析构函数语法来表示Finalize方法,就像C#那样。

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

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

class MyClass
{
    ~MyClass()
    {
    }
}

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