在Visual Studio中,当我键入行" Implements IDisposable
"时,IDE会自动添加:
一个disposedValue
成员变量
一个 Sub Dispose() Implements IDisposable.Dispose
一个 Sub Dispose(ByVal disposing As Boolean)
本Dispose()
应单独留在家中,并清理代码应放在Dispose(disposing)
.
但是Dispose Finalize Pattern表示你也应该覆盖Sub Finalize()
调用Dispose(False)
.为什么IDE也不添加这个?我必须自己添加它,还是以某种方式隐式调用?
编辑:任何想法为什么IDE自动添加80%的所需东西,但不包括Finalize方法?这种功能的重点不在于帮助您不要忘记这些事情吗?
EDIT2:谢谢大家的优秀答案,现在这完全合情合理!
如果你实际上持有垃圾收集器不会自动清理并在Dispose()中清理它们的非托管资源,那么是的,你应该在Finalize()中做同样的事情.
如果由于其他原因而实现IDisposable,则不需要实现Finalize().
基本问题是:如果没有调用Dispose()并收集对象垃圾,内存是否会泄漏?如果是,请执行Finalize.如果不是,你不需要.另外,避免实施Finalize"只是因为它更安全".具有自定义终结器的对象可能需要两个GC传递来释放它们 - 一次将它们放在挂起的终结器队列中,另一次传递以实际释放它们的内存.