2010-12-15 47 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[]类型的构造函数生成器的局部变量?似乎没有办法定义变量,或者我只是发出一个stloc.0/ldloc.0而不关心首先定义变量?

回答

2

难道你不能打电话GetILGenerator(),然后用它来声明一个局部变量使用ILGenerator.DeclareLocal

诚然,我没有使用任何的这个尝试,但它听起来这是要走的路...

+0

哇,到底我怎么会错过!我认为ref.emit仍然是一个可怕的秘密行动... – 2010-12-16 00:11:35