VB.NETでSharedメソッドを定義する方法と使い方ガイド
生徒
「先生、VB.NETで作ったメソッドは毎回オブジェクトを作らないと使えないんですか?」
先生
「普通のメソッドはそうですが、VB.NETにはSharedメソッドというオブジェクトを作らずに使える方法があります。」
生徒
「Sharedメソッドってどうやって作るんですか?」
先生
「それでは、具体例を見ながら説明しますね。」
1. Sharedメソッドとは?
VB.NETのSharedメソッドは、クラス自体に属するメソッドで、オブジェクトを作らずに呼び出せます。これはクラス共通の機能や、ユーティリティ的な処理をまとめるときに便利です。通常のメソッドはオブジェクト単位で動作しますが、Sharedメソッドはクラス単位で動作するのが特徴です。
2. VB.NETでSharedメソッドを定義する方法
Sharedメソッドを作るには、メソッド定義の先頭にSharedキーワードを付けます。これによりオブジェクトなしでメソッドを呼べるようになります。
Public Class MathUtility
Public Shared Function Multiply(a As Integer, b As Integer) As Integer
Return a * b
End Function
End Class
Dim result As Integer = MathUtility.Multiply(4, 5)
Console.WriteLine(result) '20が表示される
20
この例では、MathUtilityクラスのMultiplyメソッドをオブジェクトを作らずに呼び出しています。
3. Sharedメソッドと通常メソッドの違い
通常のメソッドはオブジェクトの状態を操作できますが、Sharedメソッドはクラス全体の共通処理のみ扱えます。逆に言うと、Sharedメソッドはどのオブジェクトからも同じ動作を保証できる便利なメソッドです。
Public Class Counter
Private Shared count As Integer = 0
Public Shared Sub Increment()
count += 1
Console.WriteLine("カウント: " & count)
End Sub
End Class
Counter.Increment()
Counter.Increment()
カウント: 1
カウント: 2
Sharedメソッドで共通のカウント値を更新し、オブジェクトを作らずに使用しています。
4. Sharedメソッドの活用例
Sharedメソッドは以下のような場合に役立ちます:
- 数学計算や文字列操作などのユーティリティ関数
- プログラム全体で共通の状態や設定を管理する処理
- オブジェクトを作る必要がない一時的な処理
このようにSharedメソッドを使うことで、コードを簡潔に整理でき、プログラム全体の効率も向上します。
5. Sharedメソッドを使うときの注意点
Sharedメソッドは個別オブジェクトの情報にアクセスできないため、オブジェクトごとの状態を操作したい場合は通常のメソッドを使う必要があります。また、Sharedメソッド内で使用する変数もクラス単位で管理する必要があります。
6. まとめとして覚えておきたいポイント
VB.NETでSharedメソッドを使うことで、オブジェクトを作らなくても便利な処理を呼び出せます。ユーティリティ関数や共通処理の管理、設定操作などで活用すれば、プログラムが効率的に動き、コードもすっきり整理できます。
まとめ
ここまで、VB.NETにおけるSharedメソッド(共有メソッド)の定義方法から、具体的な活用シーン、そして通常のインスタンスメソッドとの決定的な違いについて詳しく解説してきました。プログラミングの学習を進めていくと、「なぜこのメソッドを使うために、わざわざインスタンス化(New)しなければならないのか?」という疑問に直面することが多々あります。その疑問に対する一つの明確な答えが、このSharedキーワードに隠されています。
共有メソッドの本質を理解する
Sharedメソッドは、特定の「個体(インスタンス)」ではなく、「種族(クラス)」そのものに紐付いた機能です。例えば、数学的な計算(平方根の計算や絶対値の取得など)を行う際、その計算機がどのような状態であっても結果は変わりません。このような「状態に依存しない共通の機能」を定義する際に、Sharedメソッドは真価を発揮します。
SEOの観点からも、VB.NETの開発現場では「メモリ効率」と「コードの可読性」が常に重視されます。不要なNew(インスタンス化)を避けることで、ヒープ領域のメモリ消費を抑えることができ、結果として大規模なシステムでも安定した動作を期待できるのです。
実践的なサンプルコードで復習
より実践的な例として、アプリケーション全体で利用する共通の設定値を取得したり、ログを出力したりするユーティリティクラスの構成を考えてみましょう。下記のように定義することで、プログラムのどこからでも一行で機能を呼び出すことが可能になります。
Public Class AppLogger
' ログファイルへの出力を行うSharedメソッド
Public Shared Sub WriteLog(message As String)
Dim timestamp As String = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss")
Console.WriteLine(timestamp & " [LOG] " & message)
End Sub
End Class
' 呼び出し側:インスタンス化せずに直接呼び出す
AppLogger.WriteLog("システムの起動に成功しました。")
AppLogger.WriteLog("Sharedメソッドの動作確認中です。")
実行結果の確認
上記のコードを実行すると、コンソールには以下のように出力されます。クラス名に続けてドット(.)を打ち、メソッド名を指定するだけで動作している点に注目してください。
2026/02/06 17:45:10 [LOG] システムの起動に成功しました。
2026/02/06 17:45:11 [LOG] Sharedメソッドの動作確認中です。
設計時に意識すべき注意点
非常に便利なSharedメソッドですが、乱用は禁物です。Sharedメソッド内からは、そのクラスのSharedではない変数(インスタンス変数)にアクセスすることはできません。これは、Sharedメソッドが呼び出された時点では、まだ特定のオブジェクトが存在していない可能性があるためです。
オブジェクト指向プログラミングにおいて、データとその操作をセットにするのが基本ですが、Sharedメソッドはあえてその枠組みから一歩外れた「共通ツール箱」のような役割を担います。この役割分担を明確にすることで、メンテナンス性の高い、美しいソースコードを書くことができるようになります。
これからVB.NETで開発を行う際は、そのメソッドが「個別のオブジェクトごとに異なる結果を出すべきものか」それとも「誰がいつ使っても同じ結果を出すべきものか」を意識して、Sharedキーワードを適切に使い分けてみてください。
生徒
「先生、Sharedメソッドの使い所がかなりスッキリしてきました。要するに、わざわざNewして自分の分身を作らなくても、クラスに直接お願いすればやってくれる便利屋さんのようなイメージですね!」
先生
「その通りです。とても良い例えですね。例えば、消費税の計算をするメソッドなどは、どの商品に対しても計算ルールは同じですから、Sharedにしておくと使い勝手が良くなります。」
生徒
「でも、さっきの注意点で聞いた『インスタンス変数にアクセスできない』っていうのはどういうことですか?具体的に失敗するパターンを知っておきたいです。」
先生
「例えば、クラスに『ユーザー名』という変数があったとします。Sharedメソッドは特定のユーザーが誰かを知らないので、その名前を表示することはできないんです。もしやろうとすると、コンパイルエラーになりますよ。」
生徒
「なるほど。誰のデータか特定しなきゃいけないときは普通のメソッド、誰でも共通のルールならSharedメソッド、と使い分ければいいんですね。コードの書き方が少し変わるだけで、プログラムの構造がずっと読みやすくなりそうです!」
先生
「素晴らしい理解度です。実際に大規模なアプリケーションを組むようになると、このSharedをうまく使いこなすことで、メモリの節約やバグの軽減につながります。まずは身近な共通処理からShared化に挑戦してみてくださいね。」
生徒
「はい、ありがとうございます!早速自分のプロジェクトでも、汎用的なツールクラスを作って試してみようと思います。Sharedキーワードを付けるだけで、呼び出しが楽になるのは本当に快感ですね。」