0

我正在从 C# 反射生成一个新的Type通孔。TypeBuilder我现在遇到的问题是如何构建方法体来调用静态字段上的方法。

现在我生成的(在运行时)类看起来像这样:

public class Generated
{
    static private MyObject obj;

    public MyResponse Hello(MyRequest req1)
    {
        return obj.Hello(req1); // this part need to be grnerated
    }
}

所以现在我正在生成这样的方法:

MethodBuilder mb = tb.DefineMethod(
    methodInfo.Name,
    MethodAttributes.Public | MethodAttributes.Final,
    CallingConventions.HasThis | CallingConventions.ExplicitThis,
    methodInfo.ReturnType,
    arguments);

ILGenerator il = mb.GetILGenerator();
il.Emit(OpCodes.Ldnull); // right now I'm just simply returning null
il.Emit(OpCodes.Ret);

所以请告诉我如何在 Il 生成器的堆栈上加载静态字段,然后在其上调用某些方法。

4

1 回答 1

0

所以我只是用来ildasm.exe反编译我在我的问题中发布的类。如果有人需要与我类似的工作人员,请在下面提供 Il 代码:

IL_0000:  nop
IL_0001:  ldsfld     class ConsoleApplication1.IMyInterface ConsoleApplication1.Controller::obj
IL_0006:  ldarg.1
IL_0007:  callvirt   instance class ConsoleApplication1.MyResponse ConsoleApplication1.IMyInterface::Hello(class ConsoleApplication1.MyRequest)
IL_000c:  stloc.0
IL_000d:  br.s       IL_000f
IL_000f:  ldloc.0
IL_0010:  ret

同样在我的代码中,我删除了 lines IL_0000,c,d,f,因为(在我看来)不需要。

于 2016-06-23T13:27:36.237 回答