クラスの明示的なインスタンスを指定しないで、共有メソッドまたは共有メンバ初期化子内からクラスのインスタンス メンバへ参照することはできません。

更新 : 2007 年 11 月

共有プロシージャの内部から、クラスの非共有メンバを参照しようとしています。次のコードは、この状態を示す例です。

Class sample
    Public x as Integer
    Public Shared Sub setX()
        x = 10
    End Sub
End Class

この例では、x = 10 の代入ステートメントにより、このエラー メッセージが表示されます。これは、共有プロシージャがインスタンス変数にアクセスしようとしているからです。

変数 x は、Shared (Visual Basic) として宣言されていないためインスタンス メンバです。sample クラスの各インスタンスに、独自の変数 x が個別に含まれています。1 つのインスタンスで x に値を設定したり、この値を変更したりしても、他の各インスタンスにある x の値は変わりません。

一方、setX プロシージャは、sample クラスの全インスタンスで Shared されています。これは、クラスの特定のインスタンスに関連付けられているわけではなく、操作がインスタンスごとに独立して行われることを意味します。特定のインスタンスとの関係がないため、setX はインスタンス変数にアクセスできません。Shared 変数のみを操作できます。setX で共有変数に値を設定するか、この値を変更した場合、このクラスのすべてのインスタンスで変更後の値が利用できます。

Error ID: BC30369

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

  1. このメンバを、クラスのすべてのインスタンスで共有するのか、インスタンスごとに保持するのかを決定します。

  2. メンバの実体を 1 つだけ作成して、すべてのインスタンスで共有する場合は、メンバ宣言に Shared キーワードを追加します。プロシージャ宣言に Shared キーワードを含めます。

  3. インスタンスごとにメンバの実体を独自に作成する場合は、メンバ宣言に Shared を指定しないでください。プロシージャ宣言から Shared キーワードを削除します。

参照

参照

Shared (Visual Basic)