2015-01-06 2 views
0

내가 원래 형태에서 상속 동적 유형을 짓고 있어요와 변수에 값을 할당하고 나는 그것이 인터페이스의 원래 유형을 저장하고 싶습니다 :IL MethodBuilder가

public interface IInterface 
{ 
    Type OriginalType { get; } 
} 

그래서 내가 할 수있는 동적으로 생성 된 유형 대신 필요할 때 원본을 사용하십시오.

어떻게 이런 값을 할당 할 수 있습니까? 거기에 특정 OpCode가 있습니까, 아니면 클래스가 건설 중 기본 클래스를 "알"수있는 방법이 있습니까?

+1

나의 추천 먼저 C#으로 방출 할 작업에 해당하는 작업을 수행 한 후 MSIL보고하는 것 저것을 위해 해체. –

+0

@ 500-InternalServerError 어떻게 작성해야하는지 모르겠다. (컴파일 할 때 모르는 기본 유형을 입력 한 것처럼) 생성하는 동안 특정 값으로 지정하는 방법이 있는지 물어 보았다.). 특정 유형을 사용하여 결과를 입력하면 ILDasm의 ILCode에 특정 유형이 표시됩니다. – Danicco

+0

상속 된 유형의 'System.Type' 객체를 실제로 저장 하시겠습니까? 또는 실제로 해당 유형의 _ 인스턴스 _을 저장 하시겠습니까? 즉,'class MyDynamicClass : MyBaseClass'를 정의한다면,'_original' 필드는'Type _original' 또는'MyBaseClass _original'로 정의 될까요? 'System.Type'을 저장하는 것이 덜 유용하게 보입니다. 그래서 나는 묻습니다. – Andrew

답변

1

_original은 생성 된 유형의 입력란입니다.

이 필드의 값을 설정하려면 다음을 수행해야합니다. this._original = myvalue; ... ldarg_0 + [EmittedValue] + stfld (_original)과 같습니다. 당신이 [EmittedValue] 경우에하는 유형입니다 : ldtoken (형) + 전화 (Type.GetTypeFromHandle)

ldarg_0 //this 
ldtoken //typehandle 
call Type.GetTypeFromHandle //TypeHandle to Type 
stfld _original //setfield (must be follow ldarg_0 and value as Type) 
+0

_original은 생성 된 유형의 필드입니다. 이 필드에 값을 설정하려면 다음을 수행해야합니다. this._original = myvalue; ... ldarg_0 + [EmittedValue] + stfld (_original)과 같습니다. 당신의 경우 [EmittedValue]는 타입입니다 : ldtoken (type) + call (Type.GetTypeFromHandle) – Teter28