我一直在思考为什么建议我们不要在finalize中释放托管资源。 如果您在 http://msdn.microsoft.com/en-us/library/system.gc.suppressfinalize.aspx 看到代码示例,然后搜索字符串“Dispose(bool disposing) executes in two distinct scenarios”并阅读该评论,您就会明白我的意思。
我能想到的唯一可能性是,它可能与无法预测何时调用终结器这一事实有关。 有谁知道正确答案吗?
谢谢, 米沙尔
最佳答案
如果您从终结器中引用另一个对象,您不知道那个对象是否已经被终结 - 以及如果它被终结将如何表现. (我不知道当前是否有任何 CLR 运行多个终结器线程,但另一种可怕的可能性是当你的终结器运行时它正在被终结。)
您在终结器中需要做的就是释放您直接拥有的非托管资源。如果您要引用其他拥有资源的托管类型,请让它们在它们的终结器中完成它们的工作。
关于c# - 为什么是 "Finalize method should not reference any other objects"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2688636/