[vb.net] Enum 문(Visual Basic) - 열거형 / 변수선언 > vb.net

본문 바로가기

vb.net

[기타] [vb.net] Enum 문(Visual Basic) - 열거형 / 변수선언

회원사진
하나를하더라도최선을
2020-02-22 14:41 11,074 0

본문



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

구문

VB복사
[ <attributelist> ] [ accessmodifier ]  [ Shadows ]Enum enumerationname [ As datatype ]   memberlistEnd Enum

요소

  • attributelist

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

    FlagsAttribute 특성은 열거형의 인스턴스 값에 여러 열거형 멤버가 포함 될 수 있고 각 멤버가 열거형 값의 비트 필드를 나타내는지 여부를 나타냅니다.

  • accessmodifier

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

  • Shadows

    (선택 사항) 이 열거형이 기본 클래스에서 동일 하 게 명명 된 프로그래밍 요소 또는 오버 로드 된 요소 집합을 요소가 하 고 숨기도록 지정 합니다. 열거형은 해당 멤버가 아니라 열거형 자체 에서만 지정할 수 있습니다.

  • enumerationname

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

  • datatype

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

  • memberlist

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

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

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

    Enum 블록을 종료합니다.

주의

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

열거를 사용 하는 이점은 다음과 같습니다.

  • 바꾸려면 또는 잘못 된 숫자로 인 한 오류를 줄입니다.

  • 를 사용 하면 나중에 값을 쉽게 변경할 수 있습니다.

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

  • 이전 버전과의 호환성을 보장 합니다. 열거를 사용 하는 경우 나중에 누군가가 멤버 이름에 해당 하는 값을 변경 하면 코드가 실패할 가능성이 낮아집니다.

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

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

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

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

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

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

데이터 형식

Enum 문은 열거형의 데이터 형식을 선언할 수 있습니다. 각 멤버는 열거형의 데이터 형식을 사용 합니다. ByteIntegerLongSByteShortUIntegerULong또는 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가 on으로 설정 된 경우 컴파일러 오류가 발생 합니다. Option Strict 해제 되어 있으면 값이 자동으로 Enum 형식으로 변환 됩니다.

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

한정자

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

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

기본적으로 모든 열거형은 형식이 고 해당 필드는 상수입니다. 따라서 열거형 또는 해당 멤버를 선언 하는 경우 SharedStatic및 ReadOnly 키워드를 사용할 수 없습니다.

다중 값 할당

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

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

예제

다음 예제에서는 Enum 문을 사용하는 방법을 보여 줍니다. 멤버는 Medium아닌 EggSizeEnum.Medium이라고 합니다.

VB복사
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 SubEnd Class

예제

다음 예제의 메서드는 Egg 클래스 외부에 있습니다. 따라서 EggSizeEnum은 Egg.EggSizeEnum으로 정규화 됩니다.

VB복사
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 SelectEnd Sub

예제

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

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

예제

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

VB복사
Enum SecurityLevel    IllegalEntry = -1    MinimumSecurity = 0    MaximumSecurity = 1End Enum

예제

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

VB복사
Public Enum MyEnum As Byte  Zero  One  TwoEnd Enum

예제

다음 예제에서는 비트 열거를 사용 하는 방법을 보여 줍니다. 비트 열거의 인스턴스에 여러 값을 할당할 수 있습니다. Enum 선언에는 열거형을 플래그 집합으로 처리할 수 있음을 나타내는 FlagsAttribute 특성이 포함 되어 있습니다.

VB복사
' 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 = 8End EnumPublic 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: TrueEnd Sub

예제

다음 예제에서는 열거형을 반복 합니다. GetNames 메서드를 사용 하 여 열거형에서 멤버 이름 배열을 검색 하 고 GetValues 멤버 값의 배열을 검색 합니다.

VB복사
Enum EggSizeEnum    Jumbo    ExtraLarge    Large    Medium    SmallEnd EnumPublic 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

댓글목록0

등록된 댓글이 없습니다.
게시판 전체검색