当前位置:  开发笔记 > 编程语言 > 正文

VB.NET - 在实现IDisposable时是否应该添加Finalize方法?

如何解决《VB.NET-在实现IDisposable时是否应该添加Finalize方法?》经验,为你挑选了1个好方法。

在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:谢谢大家的优秀答案,现在这完全合情合理!



1> Jonathan Rup..:

如果你实际上持有垃圾收集器不会自动清理并在Dispose()中清理它们的非托管资源,那么是的,你应该在Finalize()中做同样的事情.

如果由于其他原因而实现IDisposable,则不需要实现Finalize().

基本问题是:如果没有调用Dispose()并收集对象垃圾,内存是否会泄漏?如果是,请执行Finalize.如果不是,你不需要.另外,避免实施Finalize"只是因为它更安全".具有自定义终结器的对象可能需要两个GC传递来释放它们 - 一次将它们放在挂起的终结器队列中,另一次传递以实际释放它们的内存.

推荐阅读
mylvfamily
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有