首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果对象没有终结器,GC.SuppressFinalize()是否有效?

如果对象没有终结器,GC.SuppressFinalize()是否有效?
EN

Stack Overflow用户
提问于 2020-12-21 11:03:02
回答 1查看 582关注 0票数 1

我知道,由于某些版本的StreamWriter停止了对终结器的支持,但在源代码中,我看到它调用了GC.SuppressFinalize(this)。为什么叫它?我认为它实际上只适用于有终结器的对象。

更新

我想知道如果对象没有终结器,GC.SuppressFinalize()是否有某种效果?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-21 11:04:41

它是处置模式的一部分。

Microsoft描述了如下所示的处置模式:

代码语言:javascript
复制
public void Dispose()
{
   // Dispose of unmanaged resources.
   Dispose(true);
   // Suppress finalization.
   GC.SuppressFinalize(this);
}

引用链接:

Dispose方法执行所有对象清理,因此垃圾收集器不再需要调用对象的Object.Finalize覆盖。因此,对SuppressFinalize方法的调用阻止垃圾收集器运行终结器。如果类型没有终结器,则对GC.SuppressFinalize的调用无效。注意,实际的清理是由Dispose(bool)方法重载执行的。

编辑:进一步看,关于干燥,我想StreamWriter.Close()只是打电话给StreamWrite.Dispose()。此外,StreamWriter.Close()似乎是多余的,因为基类TextWriter.Close()具有相同的内容!(这个应该直接调用TextWrite.Dispose()。但这只是MHO。)

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65391589

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档