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
문은 열거형의 데이터 형식을 선언할 수 있습니다. 각 멤버는 열거형의 데이터 형식을 취합니다. Byte
, Integer
, Long
, SByte
, Short
, UInteger
, ULong
또는 UShort
을(를) 지정할 수 있습니다.
열거형에 대한 datatype
을 지정하지 않으면 각 멤버는 해당 initializer
데이터 형식을 가져옵니다. datatype
과 initializer
를 모두 지정하는 경우 initializer
의 데이터 형식은 datatype
으로 변환 가능해야 합니다. datatype
과 initializer
가 모두 없으면 데이터 형식의 기본값은 Integer
입니다.
멤버 초기화
Enum
문은 memberlist
에서 선택한 멤버의 내용을 초기화할 수 있습니다. initializer
을 사용하여 멤버에 할당할 식을 제공합니다.
멤버에 대한 initializer
을 지정하지 않으면 Visual Basic은 멤버를 0(memberlist
에서 첫 번째 member
인 경우)으로 초기화하거나 바로 앞의 member
값보다 큰 값으로 초기화합니다.
각 initializer
에 제공된 식은 리터럴, 이미 정의된 다른 상수 및 이 열거형의 이전 멤버를 포함하여 이미 정의된 열거형 멤버의 조합일 수 있습니다. 산술 및 논리 연산자를 사용하여 이러한 요소를 결합할 수 있습니다.
initializer
에서는 변수나 함수를 사용할 수 없습니다. 그러나 CByte
및 CShort
와 같은 전환 키워드를 사용할 수 있습니다. 상수 String
또는 Char
인수로 호출하는 경우 AscW
를 사용할 수도 있습니다. 컴파일 시간에 평가할 수 있기 때문입니다.
열거형에는 부동 소수점 값이 있을 수 없습니다. 멤버에 부동 소수점 값이 할당되고 Option Strict
이 설정되면 컴파일러 오류가 발생합니다. Option Strict
이 꺼져 있으면 값이 자동으로 Enum
형식으로 변환됩니다.
멤버 값이 기본 데이터 형식의 허용 범위를 초과하거나 멤버를 기본 데이터 형식에서 허용하는 최대값으로 초기화하는 경우 컴파일러는 오류를 보고합니다.
한정자
클래스, 구조체, 모듈 및 인터페이스 멤버 열거형은 기본적으로 공용 액세스로 설정됩니다. 액세스 한정자를 사용하여 액세스 수준을 조정할 수 있습니다. 네임스페이스 멤버 열거형은 기본적으로 friend 액세스로 설정됩니다. 액세스 수준을 공용으로 조정할 수 있지만 비공개 또는 보호된 액세스 수준은 조정할 수 없습니다. 자세한 내용은 Visual Basic의 액세스 수준을 참조하세요.
모든 열거형 멤버는 공용 액세스 권한을 가지며 액세스 한정자를 사용할 수 없습니다. 그러나 열거형 자체에 더 제한된 액세스 수준이 있는 경우 지정된 열거형 액세스 수준이 우선합니다.
기본적으로 모든 열거형은 형식이며 해당 필드는 상수입니다. 따라서 Shared
, Static
및 ReadOnly
키워드는 열거형 또는 해당 멤버를 선언할 때 사용할 수 없습니다.
여러 값 할당
열거형은 일반적으로 상호 배타적 값을 나타냅니다. Enum
선언에 FlagsAttribute 특성을 포함하면 열거형 인스턴스에 여러 값을 할당할 수 있습니다. FlagsAttribute 특성은 열거형을 비트 필드, 즉 플래그 집합으로 처리하도록 지정합니다. 이를 bitwise 열거형이라고 합니다.
FlagsAttribute 특성을 사용하여 열거형을 선언하는 경우 값에 2, 즉 1, 2, 4, 8, 16 등의 권한을 사용하는 것이 좋습니다. 또한 "None"은 값이 0인 멤버의 이름이 되는 것이 좋습니다. 추가 지침은 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
참고 항목
.NET