インスタンスを経由する共有メンバへのアクセスです。正規の式は評価されません。

更新 : 2007 年 11 月

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

メンバを共有する目的は、メンバを 1 つだけ作成して、そのメンバを、それを宣言したクラスまたは構造体のすべてのインスタンスから利用できるようにすることです。したがって、Shared メンバを使用するときには、クラスまたは構造体の個々のインスタンスを表す変数を通じてアクセスするよりも、クラスまたは構造体の名前を通じてアクセスした方が、本来の目的にかなっています。

インスタンス変数を通じて Shared メンバにアクセスすると、そのメンバが Shared であることが分かりにくくなって、コードが理解しにくくなります。さらに、このようなアクセス方法を、他の処理を実行する式 (たとえば共有メンバのインスタンスを返す Function プロシージャなど) の一部として使用した場合は、Visual Basic はその式と本来実行されたはずの他の処理を省略します。

使用例および詳細については、「Shared (Visual Basic)」を参照してください。

既定では、このメッセージは警告です。警告を表示しない方法や、警告をエラーとして扱う方法の詳細については、「Visual Basic での警告の構成」を参照してください。

Error ID: BC42025

このエラーを解決するには

  • Shared メンバにアクセスするときには、それを定義したクラスまたは構造体の名前を使用します。

  • 2 つのプログラミング要素が同じ名前であるときには、スコープの影響に注意してください。次の例では testClass という変数を宣言していますが、この変数名は、型となるクラスの名前と同じです。コンパイラは、sayHello() の呼び出しを、クラス名 testClass を介したアクセスとして解釈するので、警告は発生しません。

    Public Class testClass
        Public Shared Sub sayHello()
            MsgBox("Hello")
        End Sub
    End Class
    Module testModule
        Public Sub Main()
            Dim testClass As testClass = Nothing
            testClass.sayHello()
        End Sub
    End Module
    

参照

概念

Visual Basic におけるスコープ

参照

Shared (Visual Basic)