2012-06-10 4 views
4

열거 형은 다른 열거 형 요소와 고유 요소를 포함 할 수 있습니까?Enum은 다른 Enum을 포함 할 수 있습니까?

public enum CardSuit 
{ 
    spades, 
    hearts, 
    diamonds, 
    clubs 
} 

public enum GameSuit 
{ 
    spades,  //  These are 
    hearts,  //  the same 
    diamonds,  //  " CardSuit " 
    clubs,   //  elements 

    suns //    " GameSuit " special element 
} 

같은 요소를 중복 입력하지 않고도 GameSuit에 CardSuit를 포함 할 수 있습니까?

답변

4

슬프게도, 열거 형을 사용하여 원하는 것에 대한 좋은 해결책이 없습니다. 실제로

public class CardSuit 
{ 
    public static readonly CardSuit Spades = new CardSuit(); 
    public static readonly CardSuit Hearts = new CardSuit(); 
    ... 
} 

public enum GameSuit : CardSuit 
{ 
    public static readonly GameSuit Suns = new GameSuit(); 
} 

, 이것은 대부분 잘 작동 할 수 switch 문을 지원하지 않는이기는하지만 : 같은 특정 "열거 같은"유형의 public static readonly 분야의 일련의 시도 할 수있는 다른 옵션이 있습니다. 당신은 다른 명시 적으로 하나의 열거 형의 값을 수행 할 수

var cardSuit = ...; 
if (cardSuit == CardSuit.Spades || cardSuit == GameSuit.Suns) { ... } 
2

입력 한 내용은 유효하지만 두 enum은 서로 독립적입니다.

GameSuit enum spades는 CardsSuit enum spades와 관련이 없습니다.

+0

+1 GameSuit enum spades는 CardsSuit enum spades와 관련이 없습니다. –

1

:

public enum Foo { a, b, c } 
public enum Bar { a = Foo.a, b = Foo.b, c = Foo.c + 3, d } 
+0

그건 실제로 작동하지 않습니다. 'Foo foo = Bar.d'가 컴파일되지 않으면, 그 요점은 무엇입니까? ('Foo.c + 3'은 다소 끔찍합니다.) –

+0

@KirkWoll -'Bar.d'가'Foo'의 인스턴스에 할당 될 것이라고 기대하지 않습니다. – HABO

+0

맞아. 알아. 그래서 ... "확장"열거 형을 원본과 교환 할 수 없다면 그 핵심은 무엇입니까? 당신은 비슷하지만 서로 구문적인 관계가없는 두 개의 enum이 남아 있습니다. –

0

열거 특별한 행동과 특별한 클래스처럼 사용이 될 수 있습니다. 이 클래스를 직접 상속받을 수는 없지만 새로운 enum을 선언 할 때마다 계승하여 상속받습니다.

enum을 새로 상속받을 수 없습니다. enum입니다.

그런 식으로 할 수있는 유일한 방법은 리플렉션을 사용하는 것입니다. 그러나 당신은 당신이하고 싶은 것을 얻지 못합니다. 이것은 당신이 열거 형으로 Refletcion를 사용하여 얻을 수있는 방법까지 그렇게 할 수 있습니다

하지만이 아닌 서버 목적을 수행 두려워.

관련 문제