次の方法で共有


BC42025: インスタンスを介した共有メンバー、定数メンバー、列挙型メンバー、または入れ子になった型へのアクセス。修飾式は評価されません

クラスまたは構造体のインスタンス変数は、そのクラスまたは構造体で定義 Shared 変数、プロパティ、プロシージャ、またはイベントにアクセスするために使用されます。 この警告は、インスタンス変数を使用して、クラスまたは構造体の暗黙的に共有されるメンバー (定数や列挙など)、または入れ子になったクラスまたは構造体にアクセスする場合にも発生する可能性があります。

メンバーを共有する目的は、そのメンバーのコピーを 1 つだけ作成し、そのメンバーが宣言されているクラスまたは構造体のすべてのインスタンスでその 1 つのコピーを使用できるようにすることです。 この目的は、そのクラスまたは構造体の個々のインスタンスを保持する変数ではなく、そのクラスまたは構造体の名前を使用して Shared メンバーにアクセスする目的と一致します。

インスタンス変数を介して Shared メンバーにアクセスすると、メンバーが Sharedであるという事実を隠すことで、コードを理解しにくくすることができます。 さらに、このようなアクセスが、共有メンバーのインスタンスを返す Function プロシージャなど、他のアクションを実行する式の一部である場合、Visual Basic は式と、それ以外の場合に実行するその他のアクションをバイパスします。

詳細と例については、「 共有」を参照してください。

既定では、このメッセージは警告です。 警告の非表示または警告をエラーとして扱う方法の詳細については、「 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() の呼び出しを処理し、警告は発生しません。

こちらも参照ください