VB.NETでStaticメソッドを定義する方法と活用例
生徒
「先生、VB.NETのメソッドって毎回オブジェクトを作らないと使えないんですか?」
先生
「確かに普通のメソッドはオブジェクトを作ってから使います。でもVB.NETにはStaticメソッドという、オブジェクトを作らなくても使える方法があります。」
生徒
「Staticメソッドってどうやって作るんですか?」
先生
「では、例を交えて説明しますね。」
1. Staticメソッドとは?
VB.NETのStaticメソッドは、クラスそのものに紐づくメソッドで、
オブジェクト(インスタンス)を作らなくても呼び出せるのが大きな特徴です。
そのため「この処理は、どのオブジェクトでも同じ動きをする」
「状態を持たずに、決まった結果を返すだけ」といった処理に向いています。
初心者の方は、まずクラス共通の便利機能をまとめるためのメソッドだと考えると理解しやすいでしょう。
通常のメソッドは、クラスからオブジェクトを作成してから呼び出しますが、 Staticメソッドはクラス名をそのまま使って呼び出せます。 そのため、オブジェクト生成の手間がなく、コードも短く読みやすくなります。 「毎回同じ処理をするだけなのに、わざわざオブジェクトを作るのは面倒」 という場面では、Staticメソッドがとても便利です。
例えば、次のような「メッセージを表示するだけ」の処理は、 オブジェクトごとの状態を必要としないため、Staticメソッドに向いています。 プログラミング未経験の方でも、 「クラス名から直接呼んでいる」という点に注目すると理解しやすくなります。
Public Class MessageHelper
Public Shared Sub ShowMessage()
Console.WriteLine("Staticメソッドのサンプルです")
End Sub
End Class
MessageHelper.ShowMessage()
Staticメソッドのサンプルです
この例では、MessageHelperクラスのShowMessageメソッドを、
オブジェクトを作らずに直接呼び出しています。
Staticメソッドは、このように処理の入口がはっきりしていて迷いにくいのも利点です。
まずは「共通で使う処理はStaticにできないか?」という視点を持つことが、
VB.NETのコードを整理する第一歩になります。
2. VB.NETでStaticメソッドを定義する方法
Staticメソッドを定義するには、Sharedキーワードを使います。
VB.NETでは「Static」という言い方よりも、Sharedメソッドという表現の方がよく登場します。
つまり、Sharedを付けたメソッドは「クラスに属するメソッド」になり、オブジェクト(インスタンス)を作らなくても呼び出せるようになります。
初心者の方は、まず「クラス名.メソッド名で呼べるのがShared」と覚えると混乱しにくいです。
また、Sharedメソッドは引数を受け取って結果を返す形と相性が良く、計算や変換などの共通処理をまとめるのに向いています。
下の例は、二つの数字を足し算するSharedメソッドです。
呼び出す側はNewでオブジェクトを作らずに、クラス名からそのまま利用できます。
Public Class MathUtility
Public Shared Function Add(a As Integer, b As Integer) As Integer
Return a + b
End Function
End Class
Dim result As Integer = MathUtility.Add(5, 3)
Console.WriteLine(result) '8が表示される
8
上の例では、MathUtilityクラスのAddメソッドをオブジェクトを作らずに直接呼び出しています。
これがStatic(Shared)メソッドの基本形です。
もし同じ計算をいろいろな場所で使うなら、Sharedメソッドにしておくと呼び出しが統一されて読みやすくなります。
まずは、短い処理をSharedにして「クラス名から呼べる便利さ」を体感してみると理解が深まります。
3. Staticメソッドと通常のメソッドの違い
通常のメソッドはオブジェクトに紐づくため、クラスごとに異なるデータを扱うことができます。しかしStaticメソッドはクラスに属するため、個別のオブジェクト情報は使えません。逆に言えば、クラス共通の処理をまとめるのに向いています。
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
この例では、オブジェクトを作らずにIncrementメソッドを呼んで、共通のカウント値を更新しています。Staticメソッドは状態をクラス単位で管理する場合にも便利です。
4. Staticメソッドを使う場面
Staticメソッドは次のような場面で活用されます:
- 計算やユーティリティ関数(例:数学計算、文字列操作)
- 共通の状態や設定を管理するメソッド
- オブジェクトを作る必要がない一時的な処理
プログラムが大きくなると、無駄にオブジェクトを作らずに済むStaticメソッドは、メモリや処理効率の面でも有利です。
5. 注意点
Staticメソッドでは、クラスごとの共通データしか扱えないので、個々のオブジェクトの情報にはアクセスできません。オブジェクトごとに異なる状態を操作したい場合は、通常のインスタンスメソッドを使いましょう。
6. ポイント整理
VB.NETでは、Staticメソッド(Sharedメソッド)を使うことで、 オブジェクトを作成せずに処理を呼び出せるという大きな利点があります。 計算処理や変換処理、共通で使う判定ロジックなど、 「どのオブジェクトでも同じ結果になる処理」はStaticメソッドにまとめると、 コードの見通しが良くなり、全体の構造も整理されます。 初心者の方は、まず「状態を持たない処理かどうか」を判断基準にすると分かりやすいでしょう。
また、Staticメソッドを使うことで、 「どこからでも同じ呼び方で使える」という安心感も得られます。 クラス名から直接呼び出せるため、処理の入口がはっきりし、 後からコードを読み返したときにも理解しやすくなります。 共通処理をあちこちに書いてしまうより、 Staticメソッドとして一か所にまとめる方が、修正や管理も楽になります。
Public Class StringUtility
Public Shared Function IsEmpty(text As String) As Boolean
Return String.IsNullOrEmpty(text)
End Function
End Class
Dim result As Boolean = StringUtility.IsEmpty("")
Console.WriteLine(result)
True
この例では、文字列が空かどうかを判定する処理をStaticメソッドとして定義しています。 このように、毎回同じ判定を行う処理はStaticメソッドにしておくと再利用しやすく、 プログラム全体の品質も向上します。 Staticメソッドと通常のメソッドを使い分ける意識を持つことが、 VB.NETで読みやすく保守しやすいコードを書くための重要なポイントです。
まとめ
この記事では、VB.NETにおけるStaticメソッド(Sharedメソッド)の基本的な考え方から、定義方法、通常のメソッドとの違い、そして具体的な活用場面までを順番に確認してきました。 Staticメソッドは「オブジェクトを作らずに呼び出せる」という点が最大の特徴であり、クラス共通の処理や計算、ユーティリティ的な機能をまとめる際に非常に役立ちます。 プログラムを書き始めたばかりの頃は、どうしてもすべての処理をインスタンスメソッドで書いてしまいがちですが、 「この処理は本当にオブジェクトごとに必要なのか?」と一度立ち止まって考えることで、Staticメソッドを使うべき場面が見えてきます。
Staticメソッドは、クラスそのものに属するため、個々のオブジェクトの状態には依存しません。 その代わり、どこから呼び出しても同じ振る舞いをする「共通の処理」として機能します。 例えば、数値の計算、文字列の加工、設定値の取得、カウント処理など、 プログラム全体で共通して使う処理はStaticメソッドにしておくと、コードの見通しが良くなります。 無駄なオブジェクト生成を減らせるため、処理の流れもシンプルになり、結果として保守しやすい構成につながります。
一方で、Staticメソッドには注意点もあります。 クラス共通のデータしか扱えないため、オブジェクトごとに異なる値を持たせたい場合には向いていません。 そのため、「共通処理はStaticメソッド」「個別の状態を扱う処理は通常のメソッド」というように、 役割を意識して使い分けることが大切です。 この判断ができるようになると、VB.NETでのクラス設計が一段と分かりやすくなり、 他の人が読んでも理解しやすいコードを書けるようになります。
Staticメソッドの考え方を整理するサンプル
Public Class MessageUtil
Public Shared Function CreateMessage(name As String) As String
Return "こんにちは、" & name & "さん"
End Function
End Class
Dim msg As String = MessageUtil.CreateMessage("太郎")
Console.WriteLine(msg)
こんにちは、太郎さん
このサンプルでは、名前を受け取って挨拶文を作る処理をStaticメソッドとして定義しています。 このような処理は、特定のオブジェクトの状態に依存しないため、Staticメソッドとして切り出すのに適しています。 クラス名から直接呼び出せることで、「これは共通処理だ」という意図もコードから伝わりやすくなります。 小さなサンプルですが、Staticメソッドの考え方を理解するには十分な例と言えるでしょう。
生徒
「Staticメソッドって、ただオブジェクトを作らなくていいだけかと思っていましたが、 共通処理をまとめるための考え方なんですね。」
先生
「その通りです。オブジェクトを作らないという点は結果であって、 本質は『クラス全体で共通して使う処理』をどう整理するか、というところにあります。」
生徒
「計算や文字列の処理みたいに、どこから呼んでも同じ結果になるものは、 Staticメソッドにすると分かりやすそうですね。」
先生
「そうですね。逆に、ユーザーごとの状態や画面ごとの情報を扱うなら、 通常のメソッドを使ったほうが自然です。役割で使い分けるのが大切です。」
生徒
「Staticメソッドと普通のメソッドを意識して使い分けるだけで、 プログラムが整理される理由が少し分かってきました。」
先生
「それが理解できれば十分です。最初は小さなユーティリティからで構いません。 Staticメソッドを使う感覚に慣れていきましょう。」