重写 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 方法。