Module ステートメント
更新 : 2007 年 11 月
モジュールの名前を宣言し、モジュールを構成する変数、プロパティ、イベント、およびプロシージャの定義を提供します。
[ <attributelist> ] [ accessmodifier ] Module name
[ statements ]
End Module
指定項目
attributelist
省略可能です。属性リスト を参照してください。accessmodifier
省略可能です。次のいずれかになります。Visual Basic でのアクセス レベル を参照してください。
name
必ず指定します。このモジュールの名前です。宣言された要素の名前 を参照してください。statements
省略可能です。モジュールの変数、プロパティ、イベント、プロシージャ、および入れ子にされた型を定義するステートメントを指定します。End Module
Module 定義を終了します。
解説
Module ステートメントは、名前空間全体で使用可能な参照型を定義します。モジュール (標準モジュールとも呼ばれる) は、クラスと似ていますが、重要な違いがいくつかあります。モジュールのインスタンスは厳密に 1 つだけであり、作成する必要や変数に代入する必要はありません。モジュールは、継承をサポートすることもインターフェイスを実装することもありません。モジュールは、クラスや構造体が型であるという意味での型ではないことに注意してください。モジュールのデータ型を持つプログラミング要素を宣言することはできません。
Module は、名前空間レベルでのみ使用できます。つまり、モジュールの宣言コンテキストは、ソース ファイルまたは名前空間のどちらかである必要があり、クラス、構造体、モジュール、インターフェイス、プロシージャ、およびブロックでは宣言できません。モジュールは、別のモジュールまたは型に入れ子にできません。詳細については、「宣言コンテキストと既定のアクセス レベル」を参照してください。
モジュールの有効期間は、プログラムと同じです。すべてのメンバは Shared であるため、メンバの有効期間もプログラムと同じです。
既定で、モジュールのアクセス レベルは Friend (Visual Basic) です。アクセス修飾子を使用してこれらのアクセス レベルを調整できます。詳細については、「Visual Basic でのアクセス レベル」を参照してください。
モジュールのすべてのメンバは、暗黙的に Shared になります。
クラスとモジュール
両者には共通する点が多くありますが、重要な相違点もあります。
**用語。**以前のバージョンの Visual Basic では、モジュールにはクラス モジュール (.cls files) と標準モジュール (.bas files) という 2 つの種類がありました。現在のバージョンでは、呼び名がそれぞれクラスとモジュールに変わっています。
**共有メンバ。**クラスのメンバは、共有メンバまたはインスタンス メンバのどちらかにすることができます。
オブジェクト指向。 クラスはオブジェクト指向ですが、モジュールはオブジェクト指向ではありません。したがって、クラスだけがオブジェクトとしてインスタンス化できます。詳細については、「クラスとモジュール」を参照してください。
規則
修飾子すべてのモジュール メンバは、暗黙的に Shared (Visual Basic) になります。メンバを宣言するときに Shared キーワードは使用できません。また、メンバの共有の状態は変更できません。
**継承。**モジュールは、Object 以外の型を継承できません。すべてのモジュールが、この型を継承します。特に、モジュールは別のモジュールを継承できません。
たとえ Object を指定するためであっても、Inherits ステートメント をモジュールの定義で使用することはできません。
既定のプロパティ。既定のプロパティ をモジュール内に定義することはできません。
動作
アクセス レベルモジュールの内部では、各メンバを独自のアクセス レベルで宣言できます。モジュール メンバのアクセス レベルは、既定で Public (Visual Basic) になりますが、変数と定数だけは Private (Visual Basic) が既定のアクセス レベルです。モジュールのアクセス レベルがメンバのレベルより厳しい場合、指定したモジュール アクセス レベルが優先されます。
スコープモジュールのスコープは、名前空間全体です。
モジュール メンバのスコープは、モジュール全体です。すべてのメンバに型の上位変換が行われ、メンバのスコープがモジュールのある名前空間に上位変換されることに注意してください。詳細については、「型の上位変換」を参照してください。
修飾1 つのプロジェクトが複数のモジュールを持つことができます。また、名前の同じメンバを複数のモジュールに宣言できます。ただし、モジュールの外部にあるメンバを参照する場合は、適切なモジュール名を使ってメンバへの参照を修飾する必要があります。詳細については、「同じ名前を持つ複数の変数がある場合に参照を解決する」を参照してください。
使用例
Public Module thisModule
Sub Main()
Dim userName As String = InputBox("What is your name?")
MsgBox("User name is" & userName)
End Sub
' Insert variable, property, procedure, and event declarations.
End Module