【发布时间】:2020-09-09 03:00:32
【问题描述】:
在 Visual Studio(至少 2010 年)中编写 VB.NET 时,如果您创建一个实现 IDisposable 的类,IDE 将为您生成此框架:
' IDisposable
Protected Overridable Sub Dispose(disposing As Boolean)
If Not Me.disposedValue Then
If disposing Then
' TODO: dispose managed state (managed objects).
End If
' TODO: free unmanaged resources (unmanaged objects) and override Finalize() below.
' TODO: set large fields to null.
End If
Me.disposedValue = True
End Sub
如果我正确理解垃圾收集,将字段设置为 null 将毫无用处。* 但是 Visual Studio 为何会推荐它呢?
*假设您没有持有对正在处置的对象的实时引用,这很奇怪。
【问题讨论】:
-
您不能假设在 Dispose 期间没有人持有对 IDisposable 的实时引用。无论其他对象有什么引用,都可以调用 Dispose。
-
@Jerry 是的,这是可能的,但它(几乎可以肯定)是一个错误,并且可能比没有被 GC 处理的大对象更大。
-
如果您可以控制相关类的使用,那么您确实应该尝试确保它被正确使用。但是 VS 无法知道您是否正在编写旨在供其他人使用的内容。他们的错误不是您的责任,但您在 Dispose 期间所做的事情是。
标签: vb.net visual-studio-2010 visual-studio