我知道,由于某些版本StreamWriter
停止支持终结器,但在源代码中我看到它调用GC.SuppressFinalize(this)
. 为什么叫它?我认为它实际上仅适用于具有终结器的对象。
更新
我想知道GC.SuppressFinalize()
如果对象没有终结器是否有一些影响?
我知道,由于某些版本StreamWriter
停止支持终结器,但在源代码中我看到它调用GC.SuppressFinalize(this)
. 为什么叫它?我认为它实际上仅适用于具有终结器的对象。
更新
我想知道GC.SuppressFinalize()
如果对象没有终结器是否有一些影响?
它是dispose 模式的一部分。
Microsoft 将处置模式描述为:
public void Dispose()
{
// Dispose of unmanaged resources.
Dispose(true);
// Suppress finalization.
GC.SuppressFinalize(this);
}
引用链接:
该
Dispose
方法执行所有对象清理,因此垃圾收集器不再需要调用对象的Object.Finalize
覆盖。因此,对该SuppressFinalize
方法的调用会阻止垃圾收集器运行终结器。如果类型没有终结器,则调用GC.SuppressFinalize
无效。请注意,实际的清理是由Dispose(bool)
方法重载执行的。
编辑:进一步看,关于 DRY,我StreamWriter.Close()
只想打电话给StreamWrite.Dispose()
. 此外,StreamWriter.Close()
无论如何似乎都是多余的,因为基类TextWriter.Close()
具有相同的内容!(那个人应该直接打电话TextWrite.Dispose()
。但这只是MHO。)