Enum ステートメント (Visual Basic)

更新 : 2007 年 11 月

列挙体を宣言して、そのメンバの値を定義します。

[ <attribute list> ] [ access modifier ]  [ Shadows ] 
Enum enumeration name [ As data type ] 
      member list
End Enum

指定項目

  • attribute list
    省略可能です。この列挙体に適用される属性の一覧です。属性リストは山かっこ ("<" および ">") で囲む必要があります。

  • access modifier
    省略可能です。どのようなコードからこの列挙体にアクセスできるのかを指定します。次のいずれかになります。

    ProtectedFriend と指定すると、列挙体のクラス、その派生クラス、または同じアセンブリ内のコードからのみアクセスできます。

  • Shadows
    省略可能です。この列挙体が、基本クラスにある、同じ名前を持つプログラミング要素、またはオーバーロードされる要素を宣言し直すことを示します。Shadows は列挙体自体のみに指定できます。メンバには指定できません。

  • enumeration name
    必ず指定します。列挙体の名前を指定します。有効な名前の詳細については、「宣言された要素の名前」を参照してください。

  • data type
    OptionStrict が On の場合は、必ず指定します。列挙体およびそのすべてのメンバのデータ型を指定します。

  • member list
    必ず指定します。このステートメントで宣言する定数のメンバ リストです。メンバが複数の場合には、ソース コード行も複数になります。

    各 member の構文と指定項目は次のとおりです。[<attribute list>] member name [ = initializer ]

    指定項目

    説明

    member name

    必ず指定します。このメンバの名前です。

    initializer

    省略可能です。コンパイル時に計算して、このメンバに代入される式です。

  • EndEnum
    Enum ブロックを終了します。

解説

論理的に互いに関連があり、変更することのない複数の値が存在する場合に、これらの値を列挙体でまとめて定義できます。このような使い方をすると、列挙体および列挙体のメンバに意味のある名前を付けることができ、値を使用するよりも覚えやすくなります。列挙体を定義したら、列挙体のメンバをコードの随所で使用できます。これによって、相互に関連する値がすべて同じ列挙体名で表現されるため、コードも読みやすくなります。

Enum は、名前空間またはモジュール レベルでのみ使用できます。つまり、列挙体の宣言コンテキストは、ソース ファイル、名前空間、クラス、構造体、モジュール、またはインターフェイスのいずれかである必要があり、プロシージャでは宣言できません。詳細については、「宣言コンテキストと既定のアクセス レベル」を参照してください。

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

参照

概念

暗黙の型変換と明示的な型変換

組み込み定数と組み込み列挙型

参照

Const ステートメント (Visual Basic)

Dim ステートメント (Visual Basic)

データ型変換関数

Asc 関数、AscW 関数

その他の技術情報

Visual Basic の定数と列挙体