Enum ステートメント (Visual Basic)
列挙体を宣言して、そのメンバーの値を定義します。
[ <attribute list> ] [ access modifier ] [ Shadows ]
Enum enumeration name [ As data type ]
member list
End Enum
指定項目
指定項目 |
説明 |
attribute list |
省略可能です。 この列挙体に適用される属性の一覧です。 属性リストは山かっこ ("<" および ">") で囲む必要があります。 |
access modifier |
省略可能です。 どのようなコードからこの列挙体にアクセスできるのかを指定します。 次のいずれかの値を指定します。 Protected Friend と指定すると、列挙体のクラス、その派生クラス、または同じアセンブリ内のコードからのみアクセスできます。 |
Shadows |
省略可能です。 この列挙体が、基本クラスにある、同じ名前を持つプログラミング要素、またはオーバーロードされる要素を宣言し直すことを示します。 Shadows は列挙体自体のみに指定できます。メンバーには指定できません。 |
enumeration name |
必ず指定します。 列挙体の名前を指定します。 有効な名前の詳細については、「宣言された要素の名前 (Visual Basic)」を参照してください。 |
data type |
省略可能です。 列挙体およびそのすべてのメンバーのデータ型を指定します。 |
member list |
必ず指定します。 このステートメントで宣言する定数のメンバー リストです。 メンバーが複数の場合には、ソース コード行も複数になります。 各 member の構文と指定項目は次のとおりです。[<attribute list>] member name [ = initializer ]
指定項目説明
member name 必ず指定します。このメンバーの名前です。
initializer 省略可能です。コンパイル時に計算して、このメンバーに代入される式です。
|
End Enum |
Enum ブロックを終了します。 |
解説
論理的に互いに関連があり、変更することのない複数の値が存在する場合に、これらの値を列挙体でまとめて定義できます。 このような使い方をすると、列挙体および列挙体のメンバーに意味のある名前を付けることができ、値を使用するよりも覚えやすくなります。 列挙体を定義したら、列挙体のメンバーをコードの随所で使用できます。 これによって、相互に関連する値がすべて同じ列挙体名で表現されるため、コードも読みやすくなります。
Enum は、名前空間またはモジュール レベルでのみ使用できます。 つまり、列挙体の宣言コンテキストは、ソース ファイル、名前空間、クラス、構造体、モジュール、またはインターフェイスのいずれかである必要があり、プロシージャでは宣言できません。 詳細については、「宣言コンテキストと既定のアクセス レベル (Visual Basic)」を参照してください。
Enum ステートメントでは、列挙体のデータ型を宣言できます。 各メンバーのデータ型は、列挙体のデータ型になります。 Byte、Integer、Long、SByte、Short、UInteger、ULong、または UShort のいずれかを指定できます。
メンバーに initializer を指定しないと、そのメンバーが member list 内の最初の member である場合、Visual Basic で、そのメンバーがゼロに初期化されます。最初のメンバーでない場合には、直前の member に 1 を加えた値に初期化されます。
クラス、構造体、モジュール、およびインターフェイスのメンバー列挙体は、既定でパブリック アクセスです。 アクセス修飾子を使用してこれらのアクセス レベルを調整できます。 名前空間のメンバーの列挙体は、既定でフレンド アクセスです。 このアクセス レベルをパブリックに変更することはできますが、プライベートやプロテクトには変更できません。 詳細については、「Visual Basic でのアクセス レベル」を参照してください。
宣言コンテキスト。 モジュール レベルで宣言された、プロシージャの外側にある列挙体をメンバー列挙体といいます。列挙体を宣言しているクラス、構造体、モジュール、またはインターフェイスのメンバーです。
名前空間レベルで宣言され、クラス、構造体、モジュール、またはインターフェイスの外側にある列挙体は、この列挙体を宣言している名前空間のみのメンバーです。
属性。 列挙体全体に対して属性を適用できます。個々のメンバーに適用することはできません。 属性を指定すると、アセンブリのメタデータに情報が付加されます。
修飾子。 既定では、すべての列挙体は型であり、列挙体のフィールドは定数です。 したがって、列挙体やそのメンバーを宣言するとき、Shared、Static、および ReadOnly のキーワードは使用できません。
データ型のルール
既定の型。 列挙体の data type を指定しない場合、各メンバーのデータ型は initializer のデータ型になります。 data type と initializer の両方を指定する場合は、initializer のデータ型を data type と互換性のあるものにする必要があります。 data type と initializer のどちらも指定しない場合、既定のデータ型は Integer になります。
初期化。 Enum ステートメントは、member list の選択されたメンバーの内容を初期化できます。 メンバーに代入するための式を指定するには、initializer を使用します。
各 initializer に指定する式は、リテラル、定義済みの他の定数、定義済みの他の列挙体のメンバーを適宜組み合わせます。この列挙体内の定義済みのメンバーも式に利用できます。 算術演算子と論理演算子を使って、各要素を組み合わせることもできます。
initializer では、変数または関数は使用できません。 ただし、CByte や CShort などの変換キーワードは使用できます。 また、AscW も使用できます。この場合には、定数の String 引数、または Char 引数を指定して、コンパイル時に計算できるようにします。
動作
アクセス レベル。 列挙体のメンバーはすべて、パブリック アクセスです。他のアクセス修飾子をメンバーに指定することはできません。 ただし、列挙体自体により制限の厳しいアクセス レベルが指定してある場合は、列挙体に指定されたアクセス レベルが優先されます。
スコープ。 メンバー列挙体は、列挙体を含んでいるクラス、構造体、モジュール、またはインターフェイスのどこからでもアクセスできます。 名前空間のメンバー列挙体は、その名前空間内のどのコードからでもアクセスできます。
修飾。 クラス、構造体、またはモジュールの外部のコードで使用する場合は、そのクラス、構造体、またはモジュールの名前でメンバー列挙体の名前を修飾する必要があります。
無効な値。 メンバーの値が基になっているデータ型に対する許容範囲を超えている場合、またはいずれかのメンバーが基になっているデータ型で許容される最大値に初期化された場合は、コンパイラでエラーが報告されます。
列挙型変数は、Enum 型として宣言された変数です。 この方法で変数を宣言すると、変数に割り当てる値の管理に役立ちます。 ただし、列挙体のデータ型に変換できるデータ型を使用すれば、列挙体のメンバーとしては存在しない値を列挙型変数に代入できます。 これは、列挙体がフラグ フィールドであり、フラグを組み合わせた値を列挙型変数に代入する場合に役立ちます。 列挙型変数に、複数のフラグを代入する例を次に示します。
Enum filePermissions
create = 1
read = 2
write = 4
delete = 8
End Enum
Dim file1Perm As filePermissions
file1Perm = filePermissions.create Or filePermissions.read
列挙体メンバーに対する参照はすべて、列挙体変数の名前または列挙体の名前自体で修飾する必要があります。 たとえば、前記の例では、最初のメンバーを filePermissions.create と参照することはできますが、create と参照することはできません。
使用例
次の例では、Enum ステートメントを使用して、関連する名前付き定数値のセットを定義しています。 これらの値は、データベースのデータ入力フォームをデザインするときに選択できる色を表します。
Public Enum InterfaceColors
MistyRose = &HE1E4FF&
SlateGray = &H908070&
DodgerBlue = &HFF901E&
DeepSkyBlue = &HFFBF00&
SpringGreen = &H7FFF00&
ForestGreen = &H228B22&
Goldenrod = &H20A5DA&
Firebrick = &H2222B2&
End Enum
値に正数と負数の両方を含む例を次に示します。
Enum SecurityLevel
IllegalEntry = -1
MinimumSecurity = 0
MaximumSecurity = 1
End Enum