[c#] 열거 형 및 상수. 언제 사용합니까?

나는 열거 형에 대해 읽고 있었고 그것들이 상수 선언과 매우 유사하다는 것을 알았습니다. 열거 형 대신 상수를 사용하거나 그 반대의 경우를 어떻게 알 수 있습니까? 열거 형을 사용하면 어떤 이점이 있습니까?



답변

무언가가 될 수있는 값의 범위를 정의하려면 열거 형을 사용하십시오. 색상은 다음과 같은 명백한 예입니다.

public enum Colour
{
    White,
    Red,
    Blue
}

또는 다음과 같은 가능한 일이있을 수 있습니다. (예를 들어 내가 게으 르기 때문에 여기서 훔쳤습니다 )

[FlagsAttribute]
enum DistributedChannel
{
  None = 0,
  Transacted = 1,
  Queued = 2,
  Encrypted = 4,
  Persisted = 16,
  FaultTolerant = Transacted | Queued | Persisted
}

상수는 PI와 같은 단일 값에 대한 것이어야합니다. PI 값의 범위가 아니라 PI 만 있습니다.

고려해야 할 다른 사항은 다음과 같습니다.

  • 대답 : 상수는 반드시 상수 간의 관계를 나타내는 것은 아니지만 열거 형은 무언가가 열거 형으로 정의 된 집합 중 하나 일 수 있음을 나타냅니다.
  • b : 정의 된 열거는 인수로 사용될 때 유형 검사에 도움이 될 수 있습니다. 상수는 값일 뿐이므로 추가적인 의미 정보를 제공하지 않습니다.


답변

다른 답변에서 누락 된 것은 열거 형에 정수 기본 유형이 있다는 것입니다. 기본값을 int에서 char을 제외한 다른 정수 유형으로 변경할 수 있습니다.

enum LongEnum : long {
    foo,
    bar,
}

기본 유형에서 명시 적으로 또는 암시 적으로 캐스트 할 수 있으며 이는 switch-statements에서 유용합니다. 열거 형에 적절한 값을 가진 멤버가없는 경우에도 기본 유형의 모든 값을 열거 형으로 캐스팅 할 수 있습니다. 따라서 스위치에서 항상 기본 섹션을 사용하는 것이 좋습니다. BTW, .NET 자체는 부동 소수점 값 열거 형도 허용하지만 C #에서는 정의 할 수 없지만 여전히 사용할 수 있다고 생각합니다 (스위치 제외).

또한 열거 형을 사용하면 형식 안전성이 향상됩니다. 예를 들어 int 상수를 메서드 매개 변수로 사용하려면 int 값을 사용하여 메서드를 호출 할 수 있습니다. 물론 캐스팅을 통해 열거 형에서도 발생할 수 있지만 실수로 발생하지는 않습니다. 더 나쁜 것은 매개 변수의 순서를 혼동 할 가능성입니다.

void method(int a, int b) {...}

상수 A 만 a에 들어갈 수 있고 상수 B 만 b에 들어갈 수있는 경우 두 개의 다른 열거 형 유형을 사용하면 컴파일 중에 오용이 발견됩니다.


답변

상수는 enum이 특정 유형 인 경우 변수가 값을 변경하지 않는다는 (컴파일러가 해당 지식을 중심으로 최적화를 수행 할 수 있도록) 말하는 언어 기능입니다.

상수는 모든 데이터 유형이 될 수 있지만 열거 형은 열거 형입니다.

여러 옵션을 가질 수 있고 코드의 가독성을 높이고 싶은 곳이면 어디에서나 열거 형을 사용합니다. 즉, 0, 1, 2 값을 가진 int 또는 오류, 경고 및 정보와 같은 열거 형으로 추적 수준을 가질 수 있습니다.

Enum은 또한 비트 연산자, 즉 FontStyle.Bold | FontStyle.Italic은 굵은 글꼴과 기울임 꼴 글꼴을 제공합니다.


답변

Robert의 답변에 추가로 :

  1. 유한 한 명명 된 값 집합에는 열거 형을 사용합니다. 각 기호 뒤에있는 숫자 값에 대해서는 신경 쓰지 않습니다 (하지만 레거시 시스템과의 호환성을 위해이를 부과 할 수있는 능력은 여전히 ​​있습니다).

  2. Robert : 예, Enum은 비트 필드로 사용할 수 있습니다. Flags 속성을 사용하고 열거 형의 멤버가 적절한 숫자 값을 가지고 있는지 확인하십시오.


답변

AC # 상수는 값에 정의 된 이름을 제공한다는 점에서 변수와 유사합니다. 그러나 상수는 일단 정의되면 상수에 할당 된 값을 변경할 수 없기 때문에 표준 변수와 다릅니다. 상수의 가장 큰 이점은 자체 문서화 코드를 만드는 데 도움이 될뿐만 아니라 단일 위치에서 키 값을 선언 할 수 있다는 점입니다. 따라서 값을 업데이트하고 소프트웨어를 다시 컴파일해야하는 경우 쉽게 유지 관리 할 수 ​​있습니다.

열거 자 목록은 시퀀스와 상태를 정의하는 데 유용하며 특히 이러한 상태를 통해 자연스러운 진행이있을 때 유용합니다. 목록의 각 상수는 이름이나 값을 사용하여 형식을 지정하고 비교할 수 있기 때문입니다. 열거 형을 사용하여 제한된 유효한 값 집합을 정의 할 수도 있습니다.


답변

enum대신 사용할 때 편리한 한 가지는 const에서 값을 반복 할 수 있다는 것 입니다. 값 enum으로 그렇게하는 것이 훨씬 더 어렵습니다 const.


답변