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()
への呼び出しが、クラス名によるメソッドのアクセスとして処理され、警告は発生しません。
関連項目
.NET
フィードバック
https://aka.ms/ContentUserFeedback。
近日公開予定: 2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub イシューを段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、以下を参照してください:フィードバックの送信と表示