2011-09-19 2 views
14

오늘 나는 이와 같이 진행되는 코드를 실행했습니다.클래스 몸체 외부의 enum을 정의하지만 내부 네임 스페이스

namespace Foo 
{ 

    public enum Game{ High, Low}; 
    public enum Switch{On, Off}; 

    public class Bar() 
    { 
    // Blah 
    } 
} 

나는 그 사이의 차이점과 클래스 내부의 enum을 선언하는 것이 무엇인지 알 수 없었다. AFAIK, 당신은 여전히 ​​클래스 안에있는 열거 형을 "오버라이드 (override)"할 수 있습니다.

답변

21

열거 형은 클래스와 마찬가지로 유형입니다. 열거 형을 클래스 안에 선언하면 중첩 된 형식 일뿐입니다. 중첩 된 열거 형인 은 바깥 쪽 범위에 선언 된 동일한 이름을 가진 다른 열거 형을 숨기지 만 전체 이름 (예 : 네임 스페이스 접두사 사용)을 통해 숨겨진 열거 형을 계속 참조 할 수 있습니다.

최상위 수준 열거 형이나 중첩 열거 형을 선언할지 여부는 디자인에 따라 결정되며 해당 열거 형이 클래스 이외의 다른 항목에서 사용되는지 여부에 따라 결정됩니다. 또한 중첩 enum을 private 또는 해당 enclosing type으로 보호 할 수 있습니다. 하지만 최상위 열거 형은 훨씬 더 일반적입니다. 당신은 클래스의 열거를 넣으면

+0

그래서 적절한 이름이 최상위 열거 형입니까? – surfasb

+0

나는 이렇게 생각한다 ... [http://msdn.microsoft.com/en-us/library/ba0a1yw2.aspx]에서 이러한 정의를 찾을 수있다. –

4

, 당신은 예를 들어, 클래스 이름 당신이 클래스의 외부에서 사용할 때마다 지정해야합니다 :

SomeLongClassName x = new SomeLongClassName(Game.High, Switch.On); 
: 대신

SomeLongClassName x = new SomeLongClassName(SomeLongClassName.Game.High, SomeLongClassName.Switch.On); 

클래스에서 ennumeration을 사용하기로 결정할 수는 있지만 그 종류의 격리는 클래스에서만 작동합니다. 단일 메서드에서만 사용되는 열거 형이 있으면 메서드 내부에 넣을 수 없습니다.

관련 문제