通常のメンバは、インスタンスごとに個々の値を持ちます。Carクラスを基にインスタンスを3回生成すると、車のオブジェクトが3台分できます。それぞれ、スピードを記憶できたり、ガソリンを積んだりしていますが、3台とも別々で動いているわけです。
しかし、クラスのメンバの中で「Shared」を指定すると、静的メンバとなります。つまり、複数のオブジェクトから1つのデータを共有して利用することができるようになります。また、Sharedメンバはインスタンスを生成しなくても利用することができます。
静的フィールド変数定義の書式 |
---|
アクセス修飾子 Shared 変数名 As データ型 |
静的メソッド定義の書式 |
---|
アクセス修飾子 Shared Sub メソッド名(引数リスト) 処理 End Sub アクセス修飾子 Shared Function メソッド名(引数リスト) As 戻り値の型 処理 Return 戻り値 End Function |
○ プロジェクト
プロジェクトを作成して確認してみましょう。
プロジェクトの種類 | コンソール アプリケーション |
---|---|
プロジェクト名 | SharedTest |
○ 作成の準備
CarクラスにSharedメンバを追加しましょう。「PropertyTest」をコピーしてプロジェクトを作成してください。
○ プログラム
次のように記述を追加・修正してください。
Car.vb
○ クラス図
○ 解説
8行目では、メーカー名を扱うフィールドを宣言しています。このフィールドはSharedキーワードがついているので、インスタンスを生成しなくても使えます。今回はPrivateとなっているので、内部からしか使えませんが、このクラスのオブジェクトが複数生成されたとしてもひとつしか用意されません。
95~97行目では、Sharedメソッドを定義しています。Sharedメソッド内でフィールドやメソッドを参照する場合は、Sharedなメンバを指定できます。インスタンスメンバ(インスタンスを生成しないと使用できないメンバ)は利用できません。
○ プログラム
Sharedメンバを利用する記述を追加しましょう。
Module1.vb
○ 解説
メーカー紹介のメニューを追加しました。48行目でメニュー紹介のIntroductionMakerメソッドの呼び出しをしています。このメソッドはSharedメソッドなので、「クラス名.IntroductionMaker()」となっていることに注目してください。