Visual Basic には モジュール というものがあります。(今さらですけど。
MSDN:Module ステートメント(http://msdn2.microsoft.com/ja-jp/library/aaxss7da(VS.80).aspx)より。
Module ステートメントは、名前空間全体で使用可能な参照型を定義します。モジュール (標準モジュールとも呼ばれる) は、クラスと似ていますが、重要な違いがいくつかあります。モジュールのインスタンスは厳密に 1 つだけであり、作成する必要や変数に代入する必要はありません。モジュールは、継承をサポートすることもインターフェイスを実装することもありません。モジュールは、クラスや構造体が型であるという意味での型ではないことに注意してください。モジュールのデータ型を持つプログラミング要素を宣言することはできません。
なるほどなるほど・・・って、ん?
モジュールのインスタンスは厳密に1 つだけ!?
・・・インスタンス、インスタンスか。
で、クラスとモジュールの違いとかってのはこちら↓にあります。内容を見てみると・・・
MSDN:クラスとモジュール(http://msdn2.microsoft.com/ja-jp/library/7825002w(VS.80).aspx)より
クラスとモジュールの主な違いは、クラスはオブジェクトとしてインスタンス化でき、標準モジュールはインスタンス化できないことです。標準モジュールのデータには 1 つのコピーしか存在しません。したがって、プログラムのある部分で標準モジュールのパブリック変数を変更した後、プログラムの別の部分で同じ変数を読み取ると、変更後の値が取得されます。一方、オブジェクト データは、オブジェクトのインスタンスごとに存在します。また、標準モジュールとは異なり、クラスはインターフェイスを実装できます。
なるほどなるほど・・・って、ん?
クラスはオブジェクトとしてインスタンス化でき、標準モジュールはインスタンス化できない!?
・・・さっきインスタンスは1つだけってゆうたやん。(オブジェクトとしてってなんだ?)
なんだか言葉の揚げ足取りみたいになってますが・・・、Shared になにを思ふ? その2。のコメント欄でも触れていただいておりますが、モジュールって実は、"StandardModule 属性を持つクラス"なんです。
MSDN:StandardModuleAttribute クラス(http://msdn2.microsoft.com/ja-jp/library/microsoft.visualbasic.compilerservices.standardmoduleattribute(VS.80).aspx)
このあたりは、以下に情報がありました。
@IT:VB.NETのモジュールの正体は?
さて、そんなこんなモジュール・・・どんな状況で登場させましょうか?
余談ですが、一番最初のリンク先、MSDN:Module ステートメントの中に面白い一文がありました。
MSDN:Module ステートメント(http://msdn2.microsoft.com/ja-jp/library/aaxss7da(VS.80).aspx)より。
クラスはオブジェクト指向ですが、モジュールはオブジェクト指向ではありません。
'オブジェクト指向ではありません'ですねぇ。