VB.NETでSharedメンバーを完全ガイド!初心者でもわかるオブジェクト指向とクラスの基礎
生徒
「VB.NETのクラスでSharedってよく見るんですけど、どういうときに使うんですか?」
先生
「Sharedは、クラスをつくらなくても使える特別なメンバーを定義するときに使うキーワードです。」
生徒
「クラスをつくらなくても使えるって、どういうことですか?普通はnewでオブジェクトを作りますよね?」
先生
「そうですね。でもSharedを使えば、クラスそのものに属する変数やメソッドを扱えるようになりますよ。今から詳しく説明していきましょう。」
1. Sharedメンバーとは?
VB.NETのSharedメンバーとは、クラスに属していて、オブジェクトを作らなくても使える特別な機能です。通常、クラスの変数やメソッドを使う場合は、newを使って「インスタンス(実体)」を作ります。しかしSharedを使うと、クラス名だけでアクセスできます。
例えば、家電のリモコンを考えてみましょう。普通の変数やメソッドは「テレビ1台ごとの設定」です。一方Sharedは「全てのテレビに共通の設定」のようなイメージです。どのテレビでも同じ情報を共有して使える、そんな役割がSharedです。
プログラム初心者でも、Sharedを理解することでクラス設計やオブジェクト指向の考え方がより分かりやすくなります。特に、複数のオブジェクト間で情報を共有したい場面や、インスタンス化せずに利用したい便利な処理をつくりたいときに役立ちます。
2. Sharedメンバーはどんな場面で使える?
Sharedメンバーは、VB.NETのクラスプログラミングで幅広く使われます。たとえば次のような場面です。
- アプリ全体で共通の値を管理したいとき(例:カウンター、設定値)
- 便利なメソッドをまとめた「ユーティリティクラス」を作るとき
- インスタンスを作らずに計算だけしたいとき
- 複数のオブジェクトで同じ情報を共有するとき
具体例として、アクセス回数を数える「ページカウンター」を考えてみましょう。もしSharedを使わずに各オブジェクトごとにカウンターを持たせてしまうと、データが増えて管理が難しくなります。しかしSharedならアプリ全体で1つの数を共有できるため、動作がわかりやすくなります。
3. Shared変数の定義方法
Shared変数とは、クラス全体で共有される変数のことです。複数のインスタンスを作っても、同じ値を読み書きできます。書き方は簡単で、変数の前にSharedと書くだけです。
Public Class Counter
Public Shared Count As Integer = 0
End Class
このようにすると、Countはオブジェクトを作らずに次のようにアクセスできます。
Counter.Count += 1
Console.WriteLine(Counter.Count)
4. Sharedメソッドの定義方法
Shared変数に続いて、Sharedメソッドもクラスから直接呼び出せる便利な機能です。インスタンスを作らずに、クラス単位で共通の処理をまとめたいときに使います。
Public Class MathUtil
Public Shared Function Add(a As Integer, b As Integer) As Integer
Return a + b
End Function
End Class
呼び出し方は次の通りです。
Dim answer = MathUtil.Add(5, 3)
Console.WriteLine(answer)
5. すべてのインスタンスで共有される仕組み
Sharedメンバーは、クラスそのものに属するため、どのオブジェクトからでも同じ値にアクセスできます。初心者の方は「インスタンス」と「Shared」の違いが少しわかりにくいかもしれません。
インスタンス(オブジェクト)は「家電の1台1台」。Sharedは「全ての家電に共通の説明書」のようなイメージです。説明書は1つあれば充分であり、すべての家電から使用できます。
プログラム初心者でも、こうした例えで理解すると、VB.NETのSharedが持つ「共有のしくみ」がよくわかるようになります。
6. Sharedが便利な実例:アクセス回数を数える
ここでは、Sharedの便利さがよくわかる短いサンプルを紹介します。
Public Class AccessCounter
Public Shared TotalAccess As Integer = 0
Public Sub New()
TotalAccess += 1
End Sub
End Class
Module Program
Sub Main()
Dim a1 As New AccessCounter()
Dim a2 As New AccessCounter()
Dim a3 As New AccessCounter()
Console.WriteLine(AccessCounter.TotalAccess)
End Sub
End Module
実行結果
3
インスタンスを3つ作っただけでTotalAccessの値が3になっていることから、Shared変数がクラス全体で共有されていることがわかります。
7. Sharedを使う際の注意点
Sharedは便利な反面、使い方には注意点もあります。複数の場所から値が変更される可能性があるため、意図しない動作が起きることがあります。特に初心者の方は、「Sharedは全体共有」という性質をしっかり理解したうえで使うことが大切です。
例えば、ある画面でSharedの値を変更したのに、別の画面でもその値が変わってしまうことがあります。これは初心者が混乱しやすいポイントなので、Sharedの役割を明確にして設計しましょう。
また、プログラムが大きくなればなるほど、Sharedを乱用すると管理が難しくなります。用途を決めて最小限に使うことが、VB.NETのクラス設計を上達させるポイントです。