2014-05-12 2 views
3

나는이 같은 방법 클래스를 방출 발견 방출 선언과 같은 유형의 속성 클래스를 방출 :

class MyClass 
{ 
    String MyProperty { get; set; } 
} 

다음 방출하는 방법을 알아낼 수 없습니다 :

class MyClass 
{ 
    MyClass MyProperty { get; set; } 
} 

내가 직면 한 문제는 다음과 같습니다.

setter와 getter를 내보내려면 최종 컴파일/방출 유형을 나타내는 변수가 필요합니다. 이 Type을 내보내려면 먼저 setter/getter를 먼저 내 보내야합니다. 언어가 정적 컴파일에서 허용하기 때문에 가능하다고 생각합니다. 세터와 게터을 방출하기 위해

+1

TypeBuilder.CreateType()을 (를) 사용했습니다. 계란이 닭보다 먼저 나온 타입을 반환합니다. 아무도 당신이 잘못한 것을 볼 수 없습니다. –

+0

제목을 편집했습니다. "[제목에"태그 "가 포함되어 있어야합니까?] (http://meta.stackoverflow.com/questions/19190/)"를 참조하십시오. 여기서 합의는 "아니오, 그렇지 않아야합니다"입니다. –

+0

MSDN 도움말 상태 TypeBuilder.CreateType()은 생성중인 형식을로드하며 정의 된 필드와 메서드가 필요합니다. "클래스의 Type 개체를 만듭니다. 클래스의 필드와 메서드를 정의한 후에 Type 개체를로드하기 위해 CreateType이 호출되었습니다." CreateType이 모든 속성과 메서드가 정의되어 호출되는지 여부에 관계없이 동일한 형식을 반환하는 경우에도 작동합니다. – Andrew

답변

10

, 나는 최종 컴파일/방출 형 사실

를 나타내는 변수를 필요, 당신이하지 않는 : 당신이 단지의 유형으로 TypeBuilder을 통과해야 속성 (TypeBuilderType에서 상속되므로 returnType 매개 변수의 유효한 인수는 DefineProperty입니다.

+0

감사. 그것은 아마도 MakeBuilder를 MakeGeneric의 인수로 사용하여 다음과 같은 호출을 낼 수 있음을 의미합니다. MyClass MyProperty {get {return ReadMyPropertyAs (...); }} 기술적으로 정확한가? myTypeBuilder.CreateType()이 myTypeBuilder (즉, myTypeBuilder.CreateType() == myTypeBuilder)와 동일한 경우 올바른 것으로 기대합니다. – Andrew

+1

@Andrew, AFAIK, 당신은'Type'이 예상되는 곳이면 어디에서나'TypeBuilder'를 사용할 수 있습니다. 방출 된 코드에서 여전히 동일한 메타 데이터 토큰으로 해석되고 런타임에 방출 된 유형을 사용하므로 실제로 방출 된 유형과 동일한 것은 중요하지 않습니다. –