通常のメンバは、インスタンスごとに個々の値を持ちます。Carクラスを基にインスタンスを3回生成すると、車のオブジェクトが3台分できます。それぞれ、スピードを記憶できたり、ガソリンを積んだりしていますが、3台とも別々で動いているわけです。
しかし、クラスのメンバの中で「Shared」を指定すると、静的メンバとなります。つまり、複数のオブジェクトから1つのデータを共有して利用することができるようになります。また、Sharedメンバはインスタンスを生成しなくても利用することができます。
静的フィールド変数定義の書式 |
---|
アクセス修飾子 Shared 変数名 As データ型 |
静的メソッド定義の書式 |
---|
アクセス修飾子 Shared Sub メソッド名(引数リスト) 処理 End Sub アクセス修飾子 Shared Function メソッド名(引数リスト) As 戻り値の型 処理 Return 戻り値 End Function |
○ プロジェクト
プロジェクトを作成して確認してみましょう。
プロジェクトの種類 | コンソール アプリケーション |
---|---|
プロジェクト名 | SharedTest1 |
○ 作成の準備
Carクラスのメンバに共有フィールド変数を定義して、利用しましょう。「PropertyTest」をコピーしてプロジェクトを作成してください。
○ プログラム
次のようにCarクラスにプログラムを追加してください。
Car.vb
○ フォームデザイン
複数の車を使用しますので、以下のようにフォームにコントロールを配置してください。「InstanceWTest」のコントロールに追加した仕様です。
○ プログラム
次のように利用するプログラムを記述してください。
Form1.vb
共有メンバは、「クラス名.共有メンバ名」で利用することができます。
共有ですので、変更すると参照する全てのオブジェクトに影響を及ぼします。次のようにボタンを追加して、プログラムも追加してみてください。
○ プロジェクト
プロジェクトを作成して確認してみましょう。
プロジェクトの種類 | コンソール アプリケーション |
---|---|
プロジェクト名 | SharedTest2 |
○ 作成の準備
「SharedTest1」をコピーしてプロジェクトを作成してください。
○ フォームデザイン
以下のようにフォームにコントロールを追加してください。
○ プログラム
次のように利用するプログラムを記述してください。
Form1.vb
今回のプログラムは、クラスの定義で既にメーカー名が設定されていますが、ボタンをクリックしてすぐに変更をし、その後、各オブジェクトで参照してみました。すると、変更が反映されているのが分かります。
プログラム内で、「Me.car1.Maker」や「Me.car2.Maker」としていますが警告が表示されます。それぞれのオブジェクトを通して共有メンバを参照しても同じものが参照できることを確認するために指定しています。正しい指定は「Car.Maker」とします。
共有メンバは使用されるとメモリ上に1つだけ存在し続けます。そのため、インスタンスを生成しなくても同じフィールドやメソッドを利用することができます。メソッドも共有にすることができますが、共有メソッドからインスタンス変数(上図の例では、「m_speed」や「m_gas」)を利用することができません。