クラスまたは構造体のインスタンス変数は、そのクラスまたは構造体に定義されている Shared
変数、プロパティ、プロシージャ、またはイベントにアクセスするために使用します。 この警告は、クラスまたは構造体の暗黙的に共有されたメンバー (定数または列挙型、または入れ子になったクラスや構造体など) へのアクセスに、インスタンス変数が使用されている場合にも発生することがあります。
メンバーを共有する目的は、そのメンバーのコピーを 1 つだけ作成し、その 1 つのコピーを、それが宣言されているクラスまたは構造体のすべてのインスタンスで使用できるようにすることです。 それは、クラスまたは構造体の個々のインスタンスを保持する変数を使用するのではなく、クラスまたは構造体の名前を使用して、Shared
メンバーにアクセスするこの目的と一致しています。
インスタンス変数を使用して Shared
メンバーにアクセスすると、メンバーが Shared
であるという事実が見えなくなるため、コードがわかりにくくなる可能性があります。 さらに、このようなアクセスが、共有メンバーのインスタンスを返す Function
プロシージャなどの他のアクションを実行する式に含まれている場合、Visual Basic では、それ以外の場合には実行されるような式やその他のアクションがバイパスされます。
詳細と例については、「Shared」を参照してください。
既定では、このメッセージは警告です。 警告を非表示にする方法や、警告をエラーとして扱う方法の詳細については、「 Configuring Warnings in Visual Basic」をご覧ください。
エラー ID: BC42025
次の例では bc42025 が生成されます。
Public Class TestClass
Public Shared Sub SayHello()
Console.WriteLine("Hello")
End Sub
End Class
Module Program
Public Sub Main()
Dim tc As New TestClass()
tc.SayHello() ' BC42025.
End Sub
End Module
次の例に示すように、Shared
メンバーを定義するクラスまたは構造体の名前を使用して、それにアクセスします。
Public Class TestClass
Public Shared Sub SayHello()
Console.WriteLine("Hello")
End Sub
End Class
Module Program
Public Sub Main()
TestClass.SayHello()
End Sub
End Module
注意
2 つのプログラミング要素が同じ名前を持つ場合のスコープの影響に注意してください。 前の例では、Dim testClass As TestClass = Nothing
を使用してインスタンスを宣言すると、コンパイラでは、testClass.SayHello()
への呼び出しが、クラス名によるメソッドのアクセスとして処理され、警告は発生しません。
.NET に関するフィードバック
.NET はオープンソース プロジェクトです。 フィードバックを提供するにはリンクを選択します。