2010-12-15 2 views
0

런타임에 빌드 된 내 개체에 대한 생성자를 만들고 싶습니다.이 개체는 ctor에 전달 된 모든 매개 변수의 개체 배열을 사용하는 메서드를 호출합니다. 내가 좋아하는 :: 매우 간단ConstructorBuilder에서 로컬 변수를 정의하는 방법은 무엇입니까?

method pulbic hidebysig specialname rtspecialname instance void .ctor(SomeObject arg) cil managed 
{ 
    ldarg.0 
    call void MyNameSpace.BaseClass::.ctor(); 
    ldc.i4.1 
    newarr System.Object 
    stloc.0 
    ldloc.0 
    ldc.i4.0 
    ldarg.1 
    stelem.ref 
    ldloc.0 
    call void SomeClass.Method(object[]) 
    ret 
} 

뭔가를해야 나타납니다 이러한 방법을 구축하는 방법을 보면,하지만 어떻게 내가이 ctor에 빌더에 유형 object[]의 로컬 변수를 정의 하는가? 변수를 정의하는 방법이없는 것 같습니까? 아니면 그냥 stloc.0/ldloc.0을 내보내고 먼저 정의하지 않겠습니까?

답변

2

GetILGenerator()을 호출 한 다음이를 사용하여 ILGenerator.DeclareLocal을 사용하여 로컬 변수를 선언 할 수 없습니까?

+0

와우, 나는 그것을 그리워 도대체 어떻게했는지 ...

는 틀림없이 나는이 중 하나를 사용하여 시도하지 않은,하지만 갈 수있는 방법처럼 소리! 나는 ref.emit이 여전히 끔찍한 은밀한 API라고 생각한다. –