在VS 2015 VB.NET中实现IDisposable的类的“查找所有引用”不起作用

时间:2016-08-02 20:50:11

标签: vb.net visual-studio-2015 idisposable find-all-references

在VS 2015中,当我针对实现IDisposable的类的类定义点击“查找所有引用”时,它会为每个类返回MyBase.Finalize()它实现了IDisposable。

注意:当我点击类定义本身的“查找所有引用”(即Public Class Test123)时会发生这种情况。如果我单击实现上的“查找所有引用”(即New Test123),则它仅获取使用该特定New构造函数的实例。这也令人困惑。在VS 2010中,类定义本身和所有实现在一个列表中组合在一起,但在2015年它们不是。

请参阅下面的屏幕截图。即使我将鼠标悬停在课程Test123上,它也会突出显示两者的MyBase.Finalize()方法 Test123 Test456

Visual Studio 2010不会这样做。这是一个错误,还是一个“新功能”?

这导致的困难是,对于当前正在工作的项目,我们为每个班级手动实施IDisposable。因此,当我在任何类上单击“查找所有引用”时,查找引用需要10-20秒,然后它会显示数千个MyBase.Finalize()实例(每个类一个) ),它基本上完全没用。

Screenshot (I can't directly insert pictures with my acct yet)

Public Class Form1
    Dim a As New Test123
    Dim b As New Test456
End Class

Public Class Test123
    Implements IDisposable

    Dim A As Double = 0

    'Dispose Implementation
    Dim mbDisposed As Boolean = False
    Public Overloads Sub Dispose() Implements IDisposable.Dispose
        Dispose(True)
    GC.SuppressFinalize(Me)
    End Sub
    Private Overloads Sub Dispose(ByVal lbDisposing As Boolean)
        If Not mbDisposed Then
            If lbDisposing Then
                'Dispose of all nullable objects
            End If
        End If
        mbDisposed = True
    End Sub
    Protected Overrides Sub Finalize()
        Dispose(False)
        MyBase.Finalize()
    End Sub
End Class

Public Class Test456
    Implements IDisposable

    Dim B As Double = 1

    'Dispose Implementation
    Dim mbDisposed As Boolean = False
    Public Overloads Sub Dispose() Implements IDisposable.Dispose
        Dispose(True)
        GC.SuppressFinalize(Me)
    End Sub
    Private Overloads Sub Dispose(ByVal lbDisposing As Boolean)
        If Not mbDisposed Then
            If lbDisposing Then
                'Dispose of all nullable objects
            End If
        End If
        mbDisposed = True
    End Sub
    Protected Overrides Sub Finalize()
        Dispose(False)
        MyBase.Finalize()
    End Sub
End Class

2 个答案:

答案 0 :(得分:0)

对于给定的方法,例如,尝试使用" Call Hierarchy"在它上面看到3组电话:

  1. 致电其基地"实施
  2. 拨打"覆盖"实现
  3. 调用其直接(当前类)实现
  4. enter image description here

    enter image description here

    帮助?

答案 1 :(得分:0)

我下载了Visual Studio 2017 RC。 "查找所有参考文献"窗口现在包含一个过滤组合框。如果我选择"分组依据:仅限定义",那么我尝试查找的实际参考出现在第一个"组"在列表中。

项目中项目中每个其他类的所有Finalize()方法仍然列出,但它们放在下面的单独组中。所以从技术上讲,这个bug仍然存在,但我能够轻松过滤出我不想看到的垃圾in this snapshot