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

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

[ <attributelist> ] [ accessmodifier ]  [ Shadows ] 
Enum enumerationname [ As datatype ] 
   memberlist
End Enum

指定項目

指定項目

Description

attributelist

省略可能です。この列挙体に適用される属性の一覧です。囲む必要があります、 属性リスト山かっこ内 ("<「と」>")。

FlagsAttribute属性は、複数の列挙型のメンバー、列挙型のインスタンスの値を含めることができることと、各メンバーが、列挙値のビット フィールドを表すことを示します。

accessmodifier

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

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

Shadows

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

enumerationname

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

datatype

省略可能です。列挙体およびそのすべてのメンバーのデータ型を指定します。

memberlist

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

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

指定項目Description
membername 必ず指定します。このメンバーの名前です。
initializer 省略可能です。コンパイル時に計算して、このメンバーに代入される式です。

EndEnum

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

解説

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

列挙体を使用する利点は次のとおりです。

  • 数値の置き換えやタイプミスによるエラーが減少する

  • 将来、値を変更しやすい

  • エラーを導入することが少なくなりますのコードを読みやすくなります。

  • 上位互換性が確保できる列挙体を使用すると、コードが他のメンバーの名前に対応する値を変更する、将来の場合は失敗する可能性が低くです。

列挙体には、名前、基になるデータ型は、メンバーのセットがあります。各メンバーは定数を表します。

クラス、構造体、モジュール、またはインターフェイス レベルでの任意のプロシージャの外で宣言された列挙体は、 列挙体のメンバー。それは、クラス、構造体、モジュール、またはそのコントロールを宣言するインターフェイスのメンバーです。

列挙型のメンバーの任意の場所、クラス、構造体、モジュール、またはインターフェイス内でアクセスできます。クラス、構造体、またはモジュールの外部のコードで使用する場合は、そのクラス、構造体、またはモジュールの名前でメンバー列挙体の名前を修飾する必要があります。追加して、完全修飾名を使用する必要性を回避できます、 のインポートステートメントをソース ファイルにします。

名前空間レベル、クラス、構造体、モジュール、またはインターフェイス外部で宣言された列挙体と、名前空間のメンバーです。

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

列挙体全体に対して属性を適用できます。個々のメンバーに適用することはできません。属性を指定すると、アセンブリのメタデータに情報が付加されます。

[データ型]

Enum ステートメントでは、列挙体のデータ型を宣言できます。各メンバーのデータ型は、列挙体のデータ型になります。Byte、Integer、Long、SByte、Short、UInteger、ULong、または UShort のいずれかを指定できます。

列挙体の datatype を指定しない場合、各メンバーのデータ型は initializer のデータ型になります。datatype と initializer の両方を指定する場合は、initializer のデータ型を datatype と互換性のあるものにする必要があります。datatype と initializer のどちらも指定しない場合、既定のデータ型は Integer になります。

メンバーを初期化します。

Enum ステートメントは、memberlist の選択されたメンバーの内容を初期化できます。メンバーに代入するための式を指定するには、initializer を使用します。

指定しない場合は、 initializerのメンバー、Visual Basic、0 に初期化 (1 つ目の場合memberでmemberlist)、またはその直前にあるのより 1 つ大きい値にmember。

各 initializer に指定する式は、リテラル、定義済みの他の定数、定義済みの他の列挙体のメンバーを適宜組み合わせます。この列挙体内の定義済みのメンバーも式に利用できます。算術演算子と論理演算子を使って、各要素を組み合わせることもできます。

initializer では、変数または関数は使用できません。ただし、CByte や CShort などの変換キーワードは使用できます。また、AscW も使用できます。この場合には、定数の String 引数、または Char 引数を指定して、コンパイル時に計算できるようにします。

列挙型は、浮動小数点値を持つことはできません。浮動小数点値は、メンバーが割り当てられている場合、 Option Strictに、コンパイラ エラーが発生した設定されています。場合Option Strictは、値が自動的に変換、 Enumタイプ。

メンバーの値が基になっているデータ型に対する許容範囲を超えている場合、またはいずれかのメンバーが基になっているデータ型で許容される最大値に初期化された場合は、コンパイラでエラーが報告されます。

修飾子

クラス、構造体、モジュール、およびインターフェイスのメンバー列挙体は、既定でパブリック アクセスです。アクセス修飾子を使用してこれらのアクセス レベルを調整できます。名前空間のメンバーの列挙体は、既定でフレンド アクセスです。このアクセス レベルをパブリックに変更することはできますが、プライベートやプロテクトには変更できません。詳細については、「Visual Basic でのアクセス レベル」を参照してください。

列挙体のメンバーはすべて、パブリック アクセスです。他のアクセス修飾子をメンバーに指定することはできません。ただし、列挙体自体により制限の厳しいアクセス レベルが指定してある場合は、列挙体に指定されたアクセス レベルが優先されます。

既定では、すべての列挙体は型であり、列挙体のフィールドは定数です。したがって、列挙体やそのメンバーを宣言するとき、Shared、Static、および ReadOnly のキーワードは使用できません。

複数の値を割り当てる

列挙型は通常、相互に排他的な値を表します。などで、 FlagsAttributeの属性、 Enum宣言、代わりに割り当てることができます複数の値を列挙体のインスタンスにします。FlagsAttribute属性を指定する列挙体をビット フィールドとして、つまりフラグのセットを処理すること。これらと呼ばれますビット列挙値。

使用して列挙型を宣言、 FlagsAttribute属性がお勧めの値は 2、1、2、4、8、16、およびを使用すること。[なし] 値が 0 では、メンバーの名前であることをもお勧めします。その他のガイドラインについてを参照してくださいFlagsAttributeEnum

使用例

次の使用例を使用する方法を示しています、 Enumステートメント。メンバーとして参照されますに注意してくださいEggSizeEnum.MediumとではなくMedium。

Public Class Egg
    Enum EggSizeEnum
        Jumbo
        ExtraLarge
        Large
        Medium
        Small
    End Enum

    Public Sub Poach()
        Dim size As EggSizeEnum

        size = EggSizeEnum.Medium
        ' Continue processing...
    End Sub
End Class

メソッドを次の例では、外には、 Eggクラス。したがって、 EggSizeEnumで完全に修飾されてEgg.EggSizeEnum。

Public Sub Scramble(ByVal size As Egg.EggSizeEnum)
    ' Process for the three largest sizes.
    ' Throw an exception for any other size.
    Select Case size
        Case Egg.EggSizeEnum.Jumbo
            ' Process.
        Case Egg.EggSizeEnum.ExtraLarge
            ' Process.
        Case Egg.EggSizeEnum.Large
            ' Process.
        Case Else
            Throw New ApplicationException("size is invalid: " & size.ToString)
    End Select
End Sub

次の例では、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

次の例では、 As句を使用して指定する、 datatypeの列挙体。

Public Enum MyEnum As Byte
  Zero
  One
  Two
End Enum

次の使用例は、ビットごとの or の列挙体を使用する方法を示しています。複数の値をビットごとの or の列挙体のインスタンスに割り当てられます。Enumの宣言が含まれています、 FlagsAttribute属性では、列挙体はフラグのセットとして扱うことのできることを示します。

' Apply the Flags attribute, which allows an instance
' of the enumeration to have multiple values.
<Flags()> Public Enum FilePermissions As Integer
    None = 0
    Create = 1
    Read = 2
    Update = 4
    Delete = 8
End Enum

Public Sub ShowBitwiseEnum()

    ' Declare the non-exclusive enumeration object and
    ' set it to multiple values.
    Dim perm As FilePermissions
    perm = FilePermissions.Read Or FilePermissions.Update

    ' Show the values in the enumeration object.
    Console.WriteLine(perm.ToString)
    ' Output: Read, Update

    ' Show the total integer value of all values
    ' in the enumeration object.
    Console.WriteLine(CInt(perm))
    ' Output: 6

    ' Show whether the enumeration object contains
    ' the specified flag.
    Console.WriteLine(perm.HasFlag(FilePermissions.Update))
    ' Output: True
End Sub

次の例では列挙型を反復処理します。それを使用して、 GetNames列挙体のメンバー名の配列を取得する方法とGetValuesメンバーの値の配列を取得します。

Enum EggSizeEnum
    Jumbo
    ExtraLarge
    Large
    Medium
    Small
End Enum

Public Sub Iterate()
    Dim names = [Enum].GetNames(GetType(EggSizeEnum))
    For Each name In names
        Console.Write(name & " ")
    Next
    Console.WriteLine()
    ' Output: Jumbo ExtraLarge Large Medium Small 

    Dim values = [Enum].GetValues(GetType(EggSizeEnum))
    For Each value In values
        Console.Write(value & " ")
    Next
    Console.WriteLine()
    ' Output: 0 1 2 3 4 
End Sub

参照

関連項目

Enum

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

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

データ型変換関数 (Visual Basic)

AscW

概念

暗黙の型変換と明示的な型変換 (Visual Basic)

定数と列挙型 (Visual Basic)