2010-12-15 1 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 
} 

довольно простой, но как определить локальную переменную типа object[] на CTOR строитель? Кажется, не существует способа определить переменные, или я просто испускаю stloc.0/ldloc.0 и не забочусь о его определении в первую очередь?

ответ

2

Не можете ли вы позвонить GetILGenerator(), а затем использовать это, чтобы объявить локальную переменную, используя ILGenerator.DeclareLocal?

Правда я не пробовал использовать какой-либо из этого, но это звучит как это путь ...

+0

ничего себе, как, черт возьми, я скучаю, что! Я думаю, ref.emit все еще является ужасно тайной api ... – 2010-12-16 00:11:35