重写 Finalize 方法

Finalize 方法在未能调用 Dispose 方法的情况下充当防护措施来清理资源。 您应该只实现 Finalize 方法来清理非托管资源。 您不应该对托管对象实现 Finalize 方法,因为垃圾回收器会自动清理托管资源。 默认情况下,Object.Finalize 方法不进行任何操作。 如果要让垃圾回收器在回收对象的内存之前对对象执行清理操作,您必须在类中重写此方法。

注意注意

您无法在 C# 或 C++ 编程语言中重写 Finalize 方法。在 C# 中可使用析构函数语法实现 Finalize 方法。在 .NET Framework 2.0 版中,C++ 为实现 Finalize 方法提供了自己的语法,如 Destructors and Finalizers in Visual C++ 中所述。在早期版本中,C++ 与 C# 一样也使用析构函数语法来实现 Finalize 方法。

Object.Finalize 方法的范围是受保护的。 当在类中重写该方法时,您应该保持这个有限的范围。 通过保护 Finalize 方法,您可以防止应用程序的用户直接调用对象的 Finalize 方法。

对象的 Finalize 方法应该释放该对象保留的所有资源。 它还应该调用该对象基类的 Finalize 方法。 对象的 Finalize 方法不应对任何非其基类的对象调用方法。 这是因为被调用的其他对象可能和调用对象在同一时间被回收,例如公共语言运行时关闭这种情况。

如果您允许任何异常避开 Finalize 方法,系统将认为方法返回,并继续调用其他对象的 Finalize 方法。

请参见

参考

Finalize

概念

实现 Dispose 方法

C# 与 C++ 中的析构函数语法

处理和引发异常

其他资源

异常处理基础知识