次の方法で共有


BC30369: クラスの明示的なインスタンスがない場合、共有メソッドまたは共有メンバー初期化子内からクラスのインスタンス メンバーを参照することはできません

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

Class Sample
    Public x as Integer
    Public Shared Sub SetX()
        x = 10
    End Sub
End Class

前の例では、assignment ステートメント x = 10 このエラー メッセージが生成されます。 これは、共有プロシージャがインスタンス変数にアクセスしようとしているためです。

変数 x は、 Shared として宣言されていないため、インスタンス メンバーです。 クラス Sample の各インスタンスには、独自の個別の変数 xが含まれています。 1 つのインスタンスが xの値を設定または変更しても、他のインスタンスの x の値には影響しません。

ただし、プロシージャSetXは、クラス Sampleのすべてのインスタンス間でSharedされます。 つまり、クラスの 1 つのインスタンスには関連付けされず、個々のインスタンスとは独立して動作します。 特定のインスタンスとの接続がないため、 setX はインスタンス変数にアクセスできません。 Shared変数でのみ動作する必要があります。 SetX共有変数の値を設定または変更すると、その新しい値をクラスのすべてのインスタンスで使用できます。

エラー ID: BC30369

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

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

  2. メンバーの 1 つのコピーをすべてのインスタンス間で共有する場合は、メンバー宣言に Shared キーワードを追加します。 プロシージャ宣言で Shared キーワードを保持します。

  3. 各インスタンスにメンバーの個別のコピーを含める場合は、メンバー宣言に Shared を指定しないでください。 プロシージャ宣言から Shared キーワードを削除します。

こちらも参照ください