열거형(C# 참조)Enumeration types (C# reference)

열거형(또는 열거형 형식)은 기본 정수 숫자 형식의 명명된 상수 집합에 의해 정의되는 값 형식입니다.An enumeration type (or enum type) is a value type defined by a set of named constants of the underlying integral numeric type. 열거형을 정의하려면 enum 키워드를 정의하고 열거형 멤버의 이름을 지정합니다.To define an enumeration type, use the enum keyword and specify the names of enum members:

enum Season
{
    Spring,
    Summer,
    Autumn,
    Winter
}

기본적으로 열거형 멤버의 연결된 상수 값은 int 형식입니다. 즉, 0으로 시작하고 정의 텍스트 순서에 따라 1씩 증가합니다.By default, the associated constant values of enum members are of type int; they start with zero and increase by one following the definition text order. 다른 정수 숫자 형식을 열거형 형식의 기본 형식으로 명시적으로 지정할 수 있습니다.You can explicitly specify any other integral numeric type as an underlying type of an enumeration type. 또한 다음 예제와 같이 연결된 상수 값을 명시적으로 지정할 수 있습니다.You also can explicitly specify the associated constant values, as the following example shows:

enum ErrorCode : ushort
{
    None = 0,
    Unknown = 1,
    ConnectionLost = 100,
    OutlierReading = 200
}

열거형 형식의 정의 내에서 메서드를 정의할 수 없습니다.You cannot define a method inside the definition of an enumeration type. 열거형 형식에 기능을 추가하려면 확장 메서드를 만듭니다.To add functionality to an enumeration type, create an extension method.

0에 해당 열거형 멤버가 없는 경우에도 열거형 형식 E의 기본값은 식 (E)0에 의해 생성되는 값입니다.The default value of an enumeration type E is the value produced by expression (E)0, even if zero doesn't have the corresponding enum member.

열거형 형식을 사용하여 상호 배타적인 값의 집합에서의 선택 또는 선택의 조합을 나타낼 수 있습니다.You use an enumeration type to represent a choice from a set of mutually exclusive values or a combination of choices. 선택의 조합을 나타내려면 열거형 형식을 비트 플래그로 정의합니다.To represent a combination of choices, define an enumeration type as bit flags.

비트 플래그로서 열거형 형식Enumeration types as bit flags

열거형 형식으로 선택의 조합을 나타내려면 개별 선택이 비트 필드가 되도록 해당 선택의 열거형 멤버를 정의합니다.If you want an enumeration type to represent a combination of choices, define enum members for those choices such that an individual choice is a bit field. 즉, 이러한 멤버의 연결된 값은 제곱이어야 합니다.That is, the associated values of those enum members should be the powers of two. 그런 다음 비트 논리 연산자 | 또는 &를 사용하여 각각 선택을 조합하거나 선택의 조합을 교차할 수 있습니다.Then, you can use the bitwise logical operators | or & to combine choices or intersect combinations of choices, respectively. 열거형 형식이 비트 필드를 선언한다고 표시하려면 Flags 특성을 적용합니다.To indicate that an enumeration type declares bit fields, apply the Flags attribute to it. 다음 예제에 나온 것처럼 열거형 형식의 정의에 몇 가지 일반적인 조합을 포함할 수도 있습니다.As the following example shows, you also can include some typical combinations in the definition of an enumeration type.

[Flags]
public enum Days
{
    None      = 0b_0000_0000,  // 0
    Monday    = 0b_0000_0001,  // 1
    Tuesday   = 0b_0000_0010,  // 2
    Wednesday = 0b_0000_0100,  // 4
    Thursday  = 0b_0000_1000,  // 8
    Friday    = 0b_0001_0000,  // 16
    Saturday  = 0b_0010_0000,  // 32
    Sunday    = 0b_0100_0000,  // 64
    Weekend   = Saturday | Sunday
}

public class FlagsEnumExample
{
    public static void Main()
    {
        Days meetingDays = Days.Monday | Days.Wednesday | Days.Friday;
        Console.WriteLine(meetingDays);
        // Output:
        // Monday, Wednesday, Friday

        Days workingFromHomeDays = Days.Thursday | Days.Friday;
        Console.WriteLine($"Join a meeting by phone on {meetingDays & workingFromHomeDays}");
        // Output:
        // Join a meeting by phone on Friday

        bool isMeetingOnTuesday = (meetingDays & Days.Tuesday) == Days.Tuesday;
        Console.WriteLine($"Is there a meeting on Tuesday: {isMeetingOnTuesday}");
        // Output:
        // Is there a meeting on Tuesday: False

        var a = (Days)37;
        Console.WriteLine(a);
        // Output:
        // Monday, Wednesday, Saturday
    }
}

자세한 내용과 예제는 System.FlagsAttribute API 참조 페이지 및 System.Enum API 참조 페이지의 비독점적 멤버 및 Flags 특성 섹션을 참조하세요.For more information and examples, see the System.FlagsAttribute API reference page and the Non-exclusive members and the Flags attribute section of the System.Enum API reference page.

System.Enum 형식 및 열거형 제약 조건The System.Enum type and enum constraint

System.Enum 형식은 모든 열거형 형식의 추상적 기본 클래스입니다.The System.Enum type is the abstract base class of all enumeration types. 이 형식은 열거형 형식 및 그 값에 대한 정보를 가져오는 여러 메서드를 제공합니다.It provides a number of methods to get information about an enumeration type and its values. 자세한 내용과 예제는 System.Enum API 참조 페이지를 참조하세요.For more information and examples, see the System.Enum API reference page.

C# 7.3부터 기본 클래스 제약 조건(열거형 제약 조건이라고 함)에서 System.Enum을 사용하여 형식 매개 변수가 열거형 형식이라고 지정할 수 있습니다.Beginning with C# 7.3, you can use System.Enum in a base class constraint (that is known as the enum constraint) to specify that a type parameter is an enumeration type.

변환Conversions

모든 열거형 형식에는 열거형 형식과 기본 정수 형식 간의 명시적 변환이 있습니다.For any enumeration type, there exist explicit conversions between the enumeration type and its underlying integral type. 열거형 값을 기본 형식에 캐스트하는 경우, 그 결과는 열거형 멤버의 연결된 정수 값입니다.If you cast an enum value to its underlying type, the result is the associated integral value of an enum member.

public enum Season
{
    Spring,
    Summer,
    Autumn,
    Winter
}

public class EnumConversionExample
{
    public static void Main()
    {
        Season a = Season.Autumn;
        Console.WriteLine($"Integral value of {a} is {(int)a}");  // output: Integral value of Autumn is 2

        var b = (Season)1;
        Console.WriteLine(b);  // output: Summer

        var c = (Season)4;
        Console.WriteLine(c);  // output: 4
    }
}

열거형 형식에 연결된 특정 값이 포함되어 있는지 확인하려면 Enum.IsDefined 메서드를 사용합니다.Use the Enum.IsDefined method to determine whether an enumeration type contains an enum member with the certain associated value.

모든 열거형 형식에는 System.Enum 형식의 boxing 및 unboxing 변환이 있습니다.For any enumeration type, there exist boxing and unboxing conversions to and from the System.Enum type, respectively.

C# 언어 사양C# language specification

자세한 내용은 C# 언어 사양의 다음 섹션을 참조하세요.For more information, see the following sections of the C# language specification:

참조See also