BC42025:共有メンバー、定数メンバー、列挙型メンバー、または入れ子にされた型にインスタンス経由でアクセスしています。正規の式は評価されません

クラスまたは構造体のインスタンス変数は、そのクラスまたは構造体に定義されている 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

Note

2 つのプログラミング要素が同じ名前を持つ場合のスコープの影響に注意してください。 前の例では、Dim testClass As TestClass = Nothing を使用してインスタンスを宣言すると、コンパイラでは、testClass.SayHello() への呼び出しが、クラス名によるメソッドのアクセスとして処理され、警告は発生しません。

関連項目