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