2

在 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()(每个类一个),它基本上完全没用。

截图(我的账户还不能直接插入图片)

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
4

2 回答 2

2

例如,对于给定的方法,尝试在其上使用“调用层次结构”来查看 3 组调用:

  1. 调用其“基础”实现
  2. 调用其“覆盖”实现
  3. 调用其直接(当前类)实现

在此处输入图像描述


在此处输入图像描述


帮助 ?

于 2016-10-25T14:28:52.013 回答
0

我下载了 Visual Studio 2017 RC。“查找所有引用”窗口现在包含一个过滤组合框。如果我选择“分组方式:仅定义”,那么我尝试查找的实际参考将出现在列表中的第一个“组”中。

Finalize()项目中项目中每个其他类的所有方法仍然列出,但它们被放置在下面的单独组中。所以从技术上讲,这个错误仍然存​​在,但我能够轻松过滤掉我不想看到的垃圾,如此快照所示

于 2017-02-13T13:13:11.743 回答