【发布时间】:2020-07-01 22:07:00
【问题描述】:
Jeffrey Richter 在他的 CLR via C# 书中(如在线示例章节 Working with Types Requiring Special Cleanup 中所见)指出以下内容:
此外,CLR 不对 Finalize 方法的调用顺序做出任何保证。因此,您应该避免编写访问其他类型定义了 Finalize 方法的对象的 Finalize 方法;那些其他对象可能已经完成。但是,访问没有定义 Finalize 方法的值类型实例或引用类型对象是完全可以的。 调用静态方法时也需要小心,因为这些方法可以在内部访问已完成的对象,导致静态方法的行为变得不可预测。
我理解上面引用的所有内容,但粗体的句子。如果静态方法只能使用其他静态成员引用由于生命周期而无法完成的对象,那么静态方法如何在内部使用已完成的对象,为什么调用实例方法是安全的?抱歉,我的结论可能是错误的,因此我将不胜感激对这个问题的任何解释。提前致谢。
【问题讨论】:
-
考虑关闭应用程序 - 一切都在被拆除,你永远不知道什么还活着 (stackoverflow.com/questions/713805/net-finalizers-and-exit0)。
标签: c# .net static clr finalizer