こんにちは!
今日は、VB.NETを使っていると必ず出会う「Module」と「Class」の違いについて、じっくりお話ししたいと思います。
最初のうちは、どっちも「コードを書く箱」みたいに見えますよね。
でも実は、この二つにはちゃんと役割の違いがあるんです。
この記事では、
- VB.NETにおける
Module
とClass
の違い Module
とC#のstatic class
って何が違うの?- VB.NETには
static class
があるの?
という3つのテーマで、わかりやすく整理していきます!
1. VB.NETのModuleとClassの違い
まずは一番基本的なところから、違いをまとめてみましょう。
項目 | Module | Class |
---|---|---|
インスタンス化 | できない | できる |
メンバーの扱い | 全部自動でSharedになる | 必要に応じてSharedをつける |
主な用途 | 共通関数やヘルパー的な役割 | オブジェクトの設計図 |
継承 | できない | できる |
Moduleについて
- Newして作るものではないです。
- すべての関数や変数が自動的にShared(共有)扱いになります。
- 共通で使いたい便利機能を書くのにピッタリです。
たとえば「文字列を整形する関数をいろんな場所で使いたい」とか、そういうときに向いています。
Classについて
- Newしてインスタンスを作るための設計図です。
- 特にSharedをつけなければ、作ったインスタンスごとに別々の状態を持てます。
- データを持つエンティティとか、ビジネスロジックを表現するときに向いています。
簡単に言うと、「物を作る」ならClass、「道具を作る」ならModuleって感じですね!
2. VB.NETのModuleとC#のstatic classの違い
次に、「じゃあModuleって、C#のstatic classと同じなの?」って話です。
結論から言うと、
ほぼ同じだけど、完全にはイコールじゃない!
という感じです。
どちらも
- インスタンスを作れない
- 中のメンバーは全部自動的に共有(Shared/static)
という特徴を持っています。
じゃあ何が違うかというと、
VB.NETのModuleは、VB.NETという言語に特化してちょっとだけ特別扱いされている、という点です。
たとえば、呼び出し方が簡単になっていたり、エディタ(IDE)の補助が入っていたりします。
でも、ふつうにプログラムを書く上では、そこまで意識しなくてもOKです。
「Moduleは、C#のstatic classみたいなものだな〜」くらいの理解で大丈夫ですよ!
3. VB.NETにはstatic classがあるの?
これ、ちょっと気になりますよね。
答えはズバリ、
VB.NETにはC#のようなstatic classは存在しません!
です!
VB.NETのルール
- VB.NETのClassには、static(静的クラス)という概念がそもそもないです。
- 代わりに、必要なメンバーに個別に
Shared
をつけていきます。 - ぜんぶSharedにしたいなら、そもそも
Module
を使った方が早いです。
つまり、Classで無理やりstaticっぽいものを作ることはできるけど、ちょっと面倒くさいんですね。
たとえばこんな感じ👇
Public Class UtilityClass Private Sub New() ' インスタンス作成を禁止 End Sub Public Shared Sub SayHello() Console.WriteLine("Hello") End Sub End Class
この例では、New
を禁止するためにコンストラクタをPrivate
にしています。
そして、メソッドにはShared
をつけています。
でも、これって結構手間ですよね…。
だったら最初から素直にModule
を使った方がシンプルです!
まとめ
今日は、VB.NETにおける
- ModuleとClassの違い
- ModuleとC#のstatic classの違い
- VB.NETにstatic classがない理由
についてお話しました!
ポイントはこれだけです。
- 全体で共通して使う道具的なものはModule
- 個々に状態を持つオブジェクトを作るならClass
- staticクラスがない代わりにModuleが便利に使える!
VB.NETは、C#とは似ているけどちょっと独特なルールを持っている言語です。
こうした違いを知っておくと、プログラムがもっとスッキリ書けるようになりますよ!
というわけで、ぜひ今日の内容を参考に、楽しいVB.NETライフを送ってくださいね!