Enum 문(Visual Basic)

열거형을 선언하고 해당 멤버의 값을 정의합니다.

구문

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

부분

  • attributelist

    선택 사항입니다. 이 열거형에 적용되는 특성 목록입니다. 특성 목록을 꺾쇠 괄호("" 및 "<>")로 묶어야 합니다.

    이 특성은 FlagsAttribute 열거형 인스턴스의 값에 여러 열거형 멤버가 포함될 수 있으며 각 멤버가 열거형 값의 비트 필드를 나타낸다는 것을 나타냅니다.

  • accessmodifier

    선택 사항입니다. 이 열거형에 액세스할 수 있는 코드를 지정합니다. 다음 중 하나일 수 있습니다.

  • Shadows

    선택 사항입니다. 이 열거형이 기본 클래스에서 동일한 명명된 프로그래밍 요소 또는 오버로드된 요소 집합을 다시 선언하고 숨기게 지정합니다. 열거형 자체에서만 그림자 를 지정할 수 있으며 멤버에는 지정할 수 없습니다.

  • enumerationname

    필수 사항입니다. 열거형의 이름입니다. 유효한 이름에 대한 자세한 내용은 선언된 요소 이름을 참조하세요.

  • datatype

    선택 사항입니다. 열거형 및 모든 해당 멤버의 데이터 형식입니다.

  • memberlist

    필수 사항입니다. 이 문에서 선언되는 멤버 상수 목록입니다. 여러 멤버가 개별 소스 코드 줄에 표시됩니다.

    각각 member 에는 다음과 같은 구문과 부분이 있습니다. [<attribute list>] member name [ = initializer ]

    부분 설명
    membername 필수 사항입니다. 이 멤버의 이름입니다.
    initializer 선택 사항입니다. 컴파일 시간에 평가되고 이 멤버에 할당되는 식입니다.
  • End Enum

    Enum 블록을 종료합니다.

설명

서로 논리적으로 관련된 일련의 교환되지 않는 값이 있는 경우 열거형에서 함께 정의할 수 있습니다. 열거형 및 해당 멤버에 대한 의미 있는 이름을 제공하므로 값보다 기억하기 쉽습니다. 그런 다음 코드의 여러 위치에서 열거형 멤버를 사용할 수 있습니다.

열거형 사용의 이점은 다음과 같습니다.

  • 숫자 변환 또는 잘못된 숫자로 인한 오류를 줄입니다.

  • 나중에 값을 쉽게 변경할 수 있습니다.

  • 코드를 더 쉽게 읽을 수 있습니다. 즉, 오류가 발생할 가능성이 적습니다.

  • 이전 버전과의 호환성이 보장됩니다. 열거형을 사용하는 경우 나중에 다른 사용자가 멤버 이름에 해당하는 값을 변경하면 코드가 실패할 가능성이 적습니다.

열거형에는 이름, 기본 데이터 형식 및 멤버 집합이 있습니다. 각 멤버는 상수입니다.

클래스, 구조체, 모듈 또는 인터페이스 수준에서 선언된 열거형은 프로시저 외부의 멤버 열거형입니다. 선언하는 클래스, 구조체, 모듈 또는 인터페이스의 멤버입니다.

멤버 열거형은 클래스, 구조체, 모듈 또는 인터페이스 내의 어디에서나 액세스할 수 있습니다. 클래스, 구조체 또는 모듈 외부의 코드는 멤버 열거형의 이름을 해당 클래스, 구조체 또는 모듈의 이름으로 한정해야 합니다. 원본 파일에 Imports 문을 추가하여 정규화된 이름을 사용할 필요가 없도록 할 수 있습니다.

클래스, 구조체, 모듈 또는 인터페이스 외부의 네임스페이스 수준에서 선언된 열거형은 표시되는 네임스페이스의 멤버입니다.

열거형에 대한 선언 컨텍스트 는 원본 파일, 네임스페이스, 클래스, 구조체, 모듈 또는 인터페이스여야 하며 프로시저가 될 수 없습니다. 자세한 내용은 선언 컨텍스트 및 기본 액세스 수준을 참조하세요.

전체적으로 열거형에 특성을 적용할 수 있지만 멤버에는 개별적으로 적용할 수 없습니다. 특성은 어셈블리의 메타데이터에 정보를 제공합니다.

데이터 형식

문은 Enum 열거형의 데이터 형식을 선언할 수 있습니다. 각 멤버는 열거형의 데이터 형식을 가져옵니다. , ,, , ULongUIntegerLongSByteShort, 또는 UShort를 지정할 Byte수 있습니다. Integer

열거형을 지정 datatype 하지 않으면 각 멤버는 해당 initializer멤버의 데이터 형식을 가져옵니다. 둘 다 datatypeinitializer지정하는 경우 데이터 형식을 initializer 으로 변환할 수 datatype있어야 합니다. 둘 다 없는 datatypeinitializer 경우 데이터 형식은 기본적으로 .로 설정 Integer됩니다.

멤버 초기화

문은 Enum 에서 선택한 멤버의 내용을 초기화할 수 있습니다 memberlist. 멤버에 할당할 식을 제공하는 데 사용합니다 initializer .

멤버에 대해 지정 initializer 하지 않으면 Visual Basic 멤버를 0으로 초기화하거나(첫 번째 member 멤버memberlist인 경우) 바로 앞의 값보다 1씩 큰 값으로 초기화합니다member.

각각 initializer 에 제공된 식은 리터럴, 이미 정의된 다른 상수 및 이 열거형의 이전 멤버를 포함하여 이미 정의된 열거형 멤버의 조합일 수 있습니다. 산술 연산자와 논리 연산자를 사용하여 이러한 요소를 결합할 수 있습니다.

에서 변수 또는 함수를 initializer사용할 수 없습니다. 그러나 다음과 같은 CByteCShort변환 키워드를 사용할 수 있습니다. 컴파일 시간에 계산할 수 있으므로 상수 String 또는 Char 인수를 사용하여 호출하는 경우에도 사용할 AscW 수 있습니다.

열거형에는 부동 소수점 값이 있을 수 없습니다. 멤버에 부동 소수점 값이 할당되고 Option Strict 켜기로 설정된 경우 컴파일러 오류가 발생합니다. 해제된 경우 Option Strict 값이 자동으로 형식으로 Enum 변환됩니다.

멤버의 값이 기본 데이터 형식의 허용 범위를 초과하거나 멤버를 기본 데이터 형식에서 허용하는 최대값으로 초기화하는 경우 컴파일러는 오류를 보고합니다.

한정자

클래스, 구조체, 모듈 및 인터페이스 멤버 열거형은 기본적으로 공용 액세스로 설정됩니다. 액세스 한정자를 사용하여 액세스 수준을 조정할 수 있습니다. 네임스페이스 멤버 열거형은 기본적으로 friend 액세스로 설정됩니다. 액세스 수준을 퍼블릭으로 조정할 수 있지만 비공개 또는 보호된 액세스 수준은 조정할 수 없습니다. 자세한 내용은 Visual Basic 액세스 수준을 참조하세요.

모든 열거형 멤버에는 공용 액세스 권한이 있으며 액세스 한정자를 사용할 수 없습니다. 그러나 열거형 자체에 더 제한된 액세스 수준이 있는 경우 지정된 열거형 액세스 수준이 우선적으로 적용됩니다.

기본적으로 모든 열거형은 형식이며 해당 필드는 상수입니다. 따라서 Shared열거형 또는 해당 멤버를 선언할 때는 , StaticReadOnly 키워드를 사용할 수 없습니다.

여러 값 할당

열거형은 일반적으로 상호 배타적 값을 나타냅니다. 선언에 FlagsAttributeEnum 특성을 포함하면 열거형 인스턴스에 여러 값을 할당할 수 있습니다. 특성은 FlagsAttribute 열거형이 비트 필드, 즉 플래그 집합으로 처리되도록 지정합니다. 이를 비트 열거형이라고 합니다.

특성을 사용하여 FlagsAttribute 열거형을 선언하는 경우 값에 대해 2, 즉 1, 2, 4, 8, 16 등의 권한을 사용하는 것이 좋습니다. 또한 값이 0인 멤버의 이름인 "None"을 사용하는 것이 좋습니다. 추가 지침은 다음을 참조 FlagsAttribute 하세요 Enum.

예 1

다음 예제에서는 Enum 문을 사용하는 방법을 보여 줍니다. 멤버는 .이 아닌 Medium것으로 참조EggSizeEnum.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

예제 2

다음 예제의 메서드는 클래스 외부에 있습니다 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

예제 3

다음 예제에서는 문을 사용하여 Enum 명명된 상수 값의 관련 집합을 정의합니다. 이 경우 값은 데이터베이스에 대한 데이터 입력 양식을 디자인하도록 선택할 수 있는 색입니다.

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

예제 4

다음 예제에서는 양수와 음수를 모두 포함하는 값을 보여 줍니다.

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

예제 5

다음 예제에서는 절을 As 사용하여 열거형을 datatype 지정합니다.

Public Enum MyEnum As Byte
    Zero
    One
    Two
End Enum

예제 6

다음 예제에서는 비트 열거형을 사용하는 방법을 보여줍니다. 비트 열거형 인스턴스에 여러 값을 할당할 수 있습니다. 선언에는 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

예제 7

다음 예제에서는 열거형을 반복합니다. 이 메서드를 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

추가 정보