2009-04-30 3 views
0

중첩 열거 형을 사용하여 클래스를 만들고 싶습니다.System.Reflection.Emit이 포함 된 중첩 열거 형

public class Foo 
{ 
    public enum Views 
    { 
    } 
} 

그러나 System.Reflection.Emit.TypeBuilder 클래스가 더 DefineNestedEnum 만 DefinedNestedType이 없습니다. ModuleBuilder.DefineEnum을 사용하면 열거 형을 만들지 만 중첩되도록 만들 방법이 없습니다. 열거하지 않고 열거 형을 만들 수 있습니까 (예 : EnumBuilder 사용)?


내 대답을 아래로 이동했습니다.

답변

2

내 대답 이동 여기에 질문을 넣었습니다. 정적 | | 상수 값과 문자 필드 내가 생각할 수있는


만 것은 System.Enum를 확장 봉인 클래스와 중첩 형식을 정의하고 대중을 정의하는 것입니다. 이것은 본질적으로 C# 컴파일러가 분해 한 내용을 기반으로 수행합니다. 이 작업을 수행하고 어셈블리를 참조하면 Intellisense는 그것을 열거 형으로 인식하고 열거 형처럼 작동합니다.


이것은 정확히 MSDN에서 Jeremy가 보여준 방법입니다.

3

this article 끝에있는 예제를 참조하십시오.이 예제는 원하는대로 정확하게 수행합니다. (올바른 인수를 사용하여 DefineNestedType을 사용합니다.)

+0

내가 말한 것과 다른 점은 무엇입니까? 상수 값이있는 필드를 정의하여 System.Enum에서 상속되는 중첩 형식입니다. 그러나 MSDN 예제에서는 중첩 된 enum을 생성하기위한 상속 지원이 없음을 나타냅니다. –

+0

요점은 다음과 같습니다. 즉, 중첩 된 열거 형은 상수 값이있는 필드를 정의하는 System.Enum에서 상속되는 중첩 형식입니다. MSDN 샘플에서 생성 된 어셈블리의 반사판을 살펴보고 중첩 된 열거 형을 사용하여 C# 클래스를 컴파일하여 생성 된 중첩 된 열거 형과 비교해 보면 동일하다는 것을 알 수 있습니다. – jlew

+0

다시 한 번, 내가 처음에 게시 한 질문과 다른 질문에 링크 된 MSDN 문서는 어떻게됩니까? 제 질문은 열거 형을 가짜로 만드는 방법에 관한 것이 아닙니다. EnumBuilder는 enum이 실제로 무엇인지에 대한 모든 세부 사항을 숨기고 있지만 EnumBuilder를 가져 와서 중첩시키는 방법은 없습니다. –