モジュールとはVB6以前のbasファイルのように、関数(メソッド)や変数など一連のソースコードをひとかたまりにしておくためのものです。
VB6以前ではbasファイル自体が一つのモジュールとなっていましたが、 VB.NETでは一つのファイルに一つ以上のモジュールを記述することができます。
VB.NETでのモジュールは、VB6以前のようにファイル自体がモジュールとなるのではなく、Moduleキーワードを使って明示的に宣言する必要があります。
Module MainModule Sub Main() Console.WriteLine("Hello, world!") End Sub End Module
これはもっとも基本的な「Hello, world!」プログラムですが、これがVB.NETプログラムの基本的な形でもあります。 ModuleキーワードからEnd Moduleキーワードまでがモジュールになり、同時に名前を与えることができます。 この場合のモジュールの名前は「MainModule」になっています。 モジュールは一つのvbファイルに複数記述できるので、次のようなコードも有効です。
Module MainModule . . End Module Module SubModule . . End Module
モジュールという概念がわかりにくいのであれば、Module〜End Moduleを一つのbasファイルと見なして考えるのもいいかもしれません。
VB.NETではクラスも一つのファイルではなくClassキーワードを使って宣言することができます。 クラスについてはクラスで詳しく説明しますが、クラスから見たモジュールとの違いを簡潔にまとめておきます。
このように、モジュールは特殊なクラスととらえることもできます。
Main()プロシージャは特殊なプロシージャで、プログラムの開始点となるプロシージャです。 Main()プロシージャは一つのプログラムに必ず一つ記述する必要があります。 全く記述しなかったり、二つ以上記述することはできません。 ただ、VB.NETではフォームをアプリケーションのエントリーポイントに指定した場合はMain()プロシージャが存在しない場合もあります。
Main()プロシージャはモジュールだけでなく、共有メソッドとしてクラスで宣言することも可能です。 Main()プロシージャの形式についてはアプリケーションの種類とコンソールアプリケーションを参照してください。
New()プロシージャも特殊なプロシージャで、これはVB.NETから採用されました。 すべてのモジュールはこのプロシージャを持つことができます。 New()プロシージャが記述されているモジュールでは、モジュールが読み込まれた時点でこのNew()プロシージャが実行されます。 次のコードでは、New()プロシージャでメッセージを初期化し、Main()プロシージャでそのメッセージを表示しています。
Module MainModule Dim message As String Sub New() message = "Hello, world!" End Sub Sub Main() Console.WriteLine(message) End Sub End Module
Hello, world!
New()プロシージャはクラスにおけるコンストラクタと同様の働きをします。