> 백엔드 개발 > C++ > C#의 열거형은 기본 상수가 동일한 여러 값을 보유할 수 있으며 그 의미는 무엇입니까?

C#의 열거형은 기본 상수가 동일한 여러 값을 보유할 수 있으며 그 의미는 무엇입니까?

Susan Sarandon
풀어 주다: 2025-01-03 02:12:37
원래의
151명이 탐색했습니다.

Can Enums in C# Hold Multiple Values with the Same Underlying Constant, and What are the Implications?

Enum 선언의 여러 값: CLR에 대한 심층 분석

구조체와 달리 열거형은 집합을 나타내는 경량 값 유형으로 분류됩니다. 명명된 상수. 그러나 질문에서 제시하는 것은 열거형을 사용하면 동일한 상수에 여러 값을 할당할 수 있다는 흥미로운 관찰입니다.

공용 언어 런타임(CLR)의 구현 세부 사항을 자세히 살펴보면 열거형이 기본적으로 구조체와 유사합니다. 뒤에서 열거형은 System.Enum 기본 클래스에서 파생되며 기본적으로 미리 정의된 상수 값이 있는 구조체입니다.

예제 열거형 선언을 고려하세요.

public enum Color
{
    Red = 1,
    Blue = 1,
    Green = 1
}
로그인 후 복사

CLR은 이 선언을 내부적으로 다음과 같이 해석합니다. :

public struct Color : System.Enum
{
    public const int Red = 1;
    public const int Blue = 1;
    public const int Green = 1;
}
로그인 후 복사

C#에서는 구조체에 대한 명시적인 기본 클래스 선언을 금지하지만 그럼에도 불구하고 CLR은 열거형에 대해 이 표현을 생성합니다.

열거형 유형에 동일한 값을 가진 여러 상수가 있어도 문제가 발생하지 않습니다. 그러나 이렇게 고유하지 않은 값을 할당하면 열거형 유형으로 변환하는 동안 예기치 않은 동작이 발생할 수 있습니다.

예:

Color color1 = (Color)1;
Color color2 = (Color)Enum.Parse(typeof(Color), "1");
로그인 후 복사

color1과 color2는 모두 Red 값으로 설정됩니다. 첫 번째 값 할당은 임의적입니다. 기술적으로 color1과 color2 모두 빨간색으로 지정되지 않습니다. 오히려 값 1을 보유합니다. 그러나 표시되면 빨간색이 표시됩니다.

또한 고유하지 않은 열거형 값 사이의 비교 연산은 놀라운 결과를 낳을 수 있습니다.

// true (Red is Green??)
bool b = Color.Red == Color.Green;
로그인 후 복사

빨간색과 녹색 모두의 기본 숫자 값이 1이기 때문에 이러한 동등성은 사실입니다.

이 동작은 본질적으로 문제가 되지는 않지만 사용 시 고려해야 합니다. 고유하지 않은 값을 가진 열거형입니다. 이러한 비고유성이 열거형 디자인의 의도된 목적 및 의미와 일치하는지 확인하는 것이 중요합니다.

위 내용은 C#의 열거형은 기본 상수가 동일한 여러 값을 보유할 수 있으며 그 의미는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿