2

VS 2015 で、IDisposable を実装するクラスのクラス定義で[すべての参照を検索] をクリックすると、IDisposable を実装するすべてMyBase.Finalize()のクラスが返されます。

:これは、クラス定義自体(つまり)で「すべての参照を検索」をクリックすると発生しますPublic Class Test123。実装(つまり)で「すべての参照を検索」をクリックすると、その特定のコンストラクターNew Test123を使用するインスタンスのみがフェッチされます。Newこれも紛らわしいです。VS 2010 では、クラス定義自体とすべての実装が 1 つのリストにグループ化されていましたが、2015 ではそうではありません。

以下のスクリーンショットを参照してください。class にマウスを重ねても、との両方のメソッドがTest123強調表示されます。MyBase.Finalize() Test123 Test456

Visual Studio 2010 はこれを行いません。これはバグですか、それとも「新機能」ですか?

これが引き起こす問題は、作業中の現在のプロジェクトではIDisposable、すべてのクラスを手動で実装することです。そのため、任意のクラスで [ Find All References ] をクリックすると、参照を見つけるのに 10 ~ 20 秒かかり、数千のインスタンスMyBase.Finalize()(すべてのクラスに 1 つ) が表示されますが、基本的にはまったく役に立ちません。

スクリーンショット (アカウントで写真を直接挿入することはまだできません)

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