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

列挙体を宣言し、そのメンバーの値を定義します。Declares an enumeration and defines the values of its members.

構文Syntax

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

指定項目Parts

  • attributelist

    省略可。Optional. この列挙に適用される属性のリスト。List of attributes that apply to this enumeration. 属性リストは山かっこ ("<" と ">") で囲む必要があります。You must enclose the attribute list in angle brackets ("<" and ">").

    FlagsAttribute 属性は、列挙体のインスタンスの値に複数の列挙体メンバーを含めることができ、各メンバーが列挙値のビットフィールドを表すことができることを示します。The FlagsAttribute attribute indicates that the value of an instance of the enumeration can include multiple enumeration members, and that each member represents a bit field in the enumeration value.

  • accessmodifier

    省略可。Optional. この列挙体にアクセスできるコードを指定します。Specifies what code can access this enumeration. 次のいずれかになります。Can be one of the following:

  • Shadows

    省略可。Optional. この列挙体が、基底クラスで同じ名前を持つプログラミング要素、またはオーバーロードされた要素のセットを直しして非表示にすることを指定します。Specifies that this enumeration redeclares and hides an identically named programming element, or set of overloaded elements, in a base class. Shadowsは、そのメンバーではなく、列挙自体にのみ指定できます。You can specify Shadows only on the enumeration itself, not on any of its members.

  • enumerationname

    必須。Required. 列挙体の名前。Name of the enumeration. 有効な名前の詳細については、「宣言された要素の名前」を参照してください。For information on valid names, see Declared Element Names.

  • datatype

    省略可。Optional. 列挙型とそのすべてのメンバーのデータ型。Data type of the enumeration and all its members.

  • memberlist

    必須。Required. このステートメントで宣言されているメンバー定数の一覧。List of member constants being declared in this statement. 個々のソースコード行に複数のメンバーが表示されます。Multiple members appear on individual source code lines.

    member には、次の構文と部分があります。 [<attribute list>] member name [ = initializer ]Each member has the following syntax and parts: [<attribute list>] member name [ = initializer ]

    要素Part 説明Description
    membername 必須。Required. このメンバーの名前。Name of this member.
    initializer 省略可。Optional. コンパイル時に評価され、このメンバーに割り当てられる式。Expression that is evaluated at compile time and assigned to this member.
  • End EnumEnd Enum

    Enum ブロックを終了します。Terminates the Enum block.

コメントRemarks

論理的に相互に関連付けられている変化しない値のセットがある場合は、それらを列挙体でまとめて定義できます。If you have a set of unchanging values that are logically related to each other, you can define them together in an enumeration. これにより、列挙体とそのメンバーにわかりやすい名前が提供され、その値よりも覚えやすくなります。This provides meaningful names for the enumeration and its members, which are easier to remember than their values. その後、コード内のさまざまな場所で列挙メンバーを使用できます。You can then use the enumeration members in many places in your code.

列挙を使用する利点は、次のとおりです。The benefits of using enumerations include the following:

  • 数値の転置またはミスによって発生するエラーを減らします。Reduces errors caused by transposing or mistyping numbers.

  • では、将来の値の変更が簡単になります。Makes it easy to change values in the future.

  • コードを読みやすくするため、エラーが発生する可能性は低くなります。Makes code easier to read, which means it is less likely that errors will be introduced.

  • 上位互換性を確保します。Ensures forward compatibility. 列挙型を使用する場合、後でメンバー名に対応する値を変更すると、コードが失敗する可能性は低くなります。If you use enumerations, your code is less likely to fail if in the future someone changes the values corresponding to the member names.

列挙体には、名前、基になるデータ型、およびメンバーのセットが含まれます。An enumeration has a name, an underlying data type, and a set of members. 各メンバーは定数を表します。Each member represents a constant.

プロシージャ以外のクラス、構造体、モジュール、またはインターフェイスレベルで宣言された列挙型は、メンバー列挙型です。An enumeration declared at class, structure, module, or interface level, outside any procedure, is a member enumeration. これは、それを宣言するクラス、構造体、モジュール、またはインターフェイスのメンバーです。It is a member of the class, structure, module, or interface that declares it.

メンバー列挙体には、クラス、構造体、モジュール、またはインターフェイス内のどこからでもアクセスできます。Member enumerations can be accessed from anywhere within their class, structure, module, or interface. クラス、構造体、またはモジュールの外部のコードでは、メンバーの列挙体の名前を、そのクラス、構造体、またはモジュールの名前で修飾する必要があります。Code outside a class, structure, or module must qualify a member enumeration's name with the name of that class, structure, or module. Imports ステートメントをソースファイルに追加することで、完全修飾名を使用する必要がないようにすることができます。You can avoid the need to use fully qualified names by adding an Imports statement to the source file.

名前空間レベルで、任意のクラス、構造体、モジュール、またはインターフェイスの外側で宣言された列挙型は、それが出現する名前空間のメンバーになります。An enumeration declared at namespace level, outside any class, structure, module, or interface, is a member of the namespace in which it appears.

列挙体の宣言コンテキストは、ソースファイル、名前空間、クラス、構造体、モジュール、またはインターフェイスである必要があり、プロシージャにすることはできません。The declaration context for an enumeration must be a source file, namespace, class, structure, module, or interface, and cannot be a procedure. 詳細については、「宣言コンテキストと既定のアクセス レベル」を参照してください。For more information, see Declaration Contexts and Default Access Levels.

列挙体全体に属性を適用することはできますが、メンバーには個別には適用できません。You can apply attributes to an enumeration as a whole, but not to its members individually. 属性は、アセンブリのメタデータに情報を提供します。An attribute contributes information to the assembly's metadata.

データ型Data Type

Enum ステートメントでは、列挙体のデータ型を宣言できます。The Enum statement can declare the data type of an enumeration. 各メンバーは、列挙体のデータ型を受け取ります。Each member takes the enumeration's data type. ByteIntegerLongSByteShortUIntegerULongUShortを指定できます。You can specify Byte, Integer, Long, SByte, Short, UInteger, ULong, or UShort.

列挙に datatype を指定しない場合、各メンバーはその initializerのデータ型を受け取ります。If you do not specify datatype for the enumeration, each member takes the data type of its initializer. datatypeinitializerの両方を指定する場合、initializer のデータ型は datatypeに変換可能である必要があります。If you specify both datatype and initializer, the data type of initializer must be convertible to datatype. datatypeinitializer も存在しない場合、データ型は既定で Integerに設定されます。If neither datatype nor initializer is present, the data type defaults to Integer.

メンバーの初期化Initializing Members

Enum ステートメントで memberlistで選択したメンバーの内容を初期化できます。The Enum statement can initialize the contents of selected members in memberlist. initializer を使用して、メンバーに割り当てられる式を指定します。You use initializer to supply an expression to be assigned to the member.

メンバーに initializer を指定しなかった場合は、Visual Basic 0 (memberlistの最初の member)、または直前の memberの値より大きい値に初期化されます。If you do not specify initializer for a member, Visual Basic initializes it either to zero (if it is the first member in memberlist), or to a value greater by one than that of the immediately preceding member.

initializer に用意されている式には、リテラル、既に定義されている他の定数、およびこの列挙の前のメンバーを含む定義済みの列挙型メンバーの任意の組み合わせを指定できます。The expression supplied in each initializer can be any combination of literals, other constants that are already defined, and enumeration members that are already defined, including a previous member of this enumeration. 算術演算子と論理演算子を使用すると、このような要素を組み合わせることができます。You can use arithmetic and logical operators to combine such elements.

initializerでは、変数または関数を使用できません。You cannot use variables or functions in initializer. ただし、CByteCShortなどの変換キーワードを使用することもできます。However, you can use conversion keywords such as CByte and CShort. 定数 String または Char 引数を使用して呼び出す場合は、コンパイル時に評価できるため、AscW を使用することもできます。You can also use AscW if you call it with a constant String or Char argument, since that can be evaluated at compile time.

列挙体に浮動小数点値を指定することはできません。Enumerations cannot have floating-point values. メンバーに浮動小数点値が割り当てられていて Option Strict が on に設定されている場合、コンパイラエラーが発生します。If a member is assigned a floating-point value and Option Strict is set to on, a compiler error occurs. Option Strict がオフの場合、値は自動的に Enum の種類に変換されます。If Option Strict is off, the value is automatically converted to the Enum type.

メンバーの値が、基になるデータ型で許容される範囲を超えている場合、またはメンバーが基になるデータ型で許容される最大値に初期化されている場合、コンパイラはエラーを報告します。If the value of a member exceeds the allowable range for the underlying data type, or if you initialize any member to the maximum value allowed by the underlying data type, the compiler reports an error.

修飾子Modifiers

クラス、構造体、モジュール、およびインターフェイス メンバーの列挙型は、既定でパブリック アクセスに設定されています。Class, structure, module, and interface member enumerations default to public access. アクセス修飾子を使用してこれらのアクセス レベルを調整できます。You can adjust their access levels with the access modifiers. 名前空間メンバーの列挙は、既定でフレンド アクセスに設定されています。Namespace member enumerations default to friend access. アクセス レベルは public に調整できますが、private または protected にすることはできません。You can adjust their access levels to public, but not to private or protected. 詳細については、「Visual Basic でのアクセス レベル」を参照してください。For more information, see Access levels in Visual Basic.

すべての列挙メンバーにはパブリックアクセスがあり、それらのメンバーに対してアクセス修飾子を使用することはできません。All enumeration members have public access, and you cannot use any access modifiers on them. ただし、列挙自体のアクセスレベルがより制限されている場合は、指定された列挙アクセスレベルが優先されます。However, if the enumeration itself has a more restricted access level, the specified enumeration access level takes precedence.

既定では、すべての列挙型とそのフィールドは定数です。By default, all enumerations are types and their fields are constants. したがって、列挙型またはそのメンバーを宣言するときに、SharedStatic、および ReadOnly キーワードを使用することはできません。Therefore the Shared, Static, and ReadOnly keywords cannot be used when declaring an enumeration or its members.

複数の値の割り当てAssigning Multiple Values

列挙型は、通常、相互に排他的な値を表します。Enumerations typically represent mutually exclusive values. Enum 宣言に FlagsAttribute 属性を含めることにより、複数の値を列挙型のインスタンスに割り当てることができます。By including the FlagsAttribute attribute in the Enum declaration, you can instead assign multiple values to an instance of the enumeration. FlagsAttribute 属性は、列挙型をビットフィールド、つまりフラグのセットとして扱うことを指定します。The FlagsAttribute attribute specifies that the enumeration be treated as a bit field, that is, a set of flags. これらはビットごとの列挙体と呼ばれます。These are called bitwise enumerations.

FlagsAttribute 属性を使用して列挙体を宣言する場合は、値に対して2の累乗 (1、2、4、8、16など) を使用することをお勧めします。When you declare an enumeration by using the FlagsAttribute attribute, we recommend that you use powers of 2, that is, 1, 2, 4, 8, 16, and so on, for the values. また、"None" は、値が0のメンバーの名前にすることをお勧めします。We also recommend that "None" be the name of a member whose value is 0. その他のガイドラインについては、「FlagsAttribute」および「Enum」を参照してください。For additional guidelines, see FlagsAttribute and Enum.

Example

Enum ステートメントを使用する方法の例を次に示します。The following example shows how to use the Enum statement. メンバーは、Mediumではなく EggSizeEnum.Mediumと呼ばれることに注意してください。Note that the member is referred to as EggSizeEnum.Medium, and not as 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

Example

次の例のメソッドは、Egg クラスの外側にあります。The method in the following example is outside the Egg class. したがって、EggSizeEnum は完全に Egg.EggSizeEnumとして修飾されます。Therefore, EggSizeEnum is fully qualified as 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

Example

次の例では、Enum ステートメントを使用して、関連する一連の名前付き定数値を定義します。The following example uses the Enum statement to define a related set of named constant values. この場合、値は、データベースのデータ入力フォームをデザインするために選択できる色です。In this case, the values are colors you might choose to design data entry forms for a database.

Public Enum InterfaceColors
    MistyRose = &HE1E4FF&
    SlateGray = &H908070&
    DodgerBlue = &HFF901E&
    DeepSkyBlue = &HFFBF00&
    SpringGreen = &H7FFF00&
    ForestGreen = &H228B22&
    Goldenrod = &H20A5DA&
    Firebrick = &H2222B2&
End Enum

Example

次の例は、正と負の両方の値を含む値を示しています。The following example shows values that include both positive and negative numbers.

Enum SecurityLevel
    IllegalEntry = -1
    MinimumSecurity = 0
    MaximumSecurity = 1
End Enum

Example

次の例では、As 句を使用して、列挙型の datatype を指定しています。In the following example, an As clause is used to specify the datatype of an enumeration.

Public Enum MyEnum As Byte
  Zero
  One
  Two
End Enum

Example

ビットごとの列挙体を使用する方法を次の例に示します。The following example shows how to use a bitwise enumeration. ビットごとの列挙体のインスタンスに複数の値を割り当てることができます。Multiple values can be assigned to an instance of a bitwise enumeration. Enum 宣言には FlagsAttribute 属性が含まれています。これは、列挙体をフラグのセットとして処理できることを示します。The Enum declaration includes the FlagsAttribute attribute, which indicates that the enumeration can be treated as a set of flags.

' 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

Example

次の例では、列挙体を反復処理します。The following example iterates through an enumeration. GetNames メソッドを使用して、列挙からメンバー名の配列を取得し、GetValues してメンバー値の配列を取得します。It uses the GetNames method to retrieve an array of member names from the enumeration, and GetValues to retrieve an array of member values.

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

参照See also