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.

RemarksRemarks

論理的に相互に関連付けられている変化しない値のセットがある場合は、それらを列挙型でまとめて定義できます。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. ByteIntegerLongSByteShortUIntegerULong、または UShort を指定できます。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 の直前の値より 1 大きい値に初期化されます。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 が off に設定されている場合は、値は自動的に 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. 名前空間メンバーの列挙型は、既定で friend アクセスに設定されます。Namespace member enumerations default to friend access. アクセス レベルはパブリックに調整できますが、プライベートにしたり保護することはできません。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. また、値が 0 のメンバーの名前を "None" にすることをお勧めします。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. したがって、EggSizeEnumEgg.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