使用IL Generator在C#反射中提交的静态方法调用方法



我正在通过C#反射的TypeBuilder生成新的Type。我现在遇到的问题是如何构建方法主体来调用静态的方法。

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

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发电机中的堆栈上加载静态字段,然后在其上调用某些方法。

,所以我只使用 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

在我的代码中,我删除了行IL_0000,c,d,f,因为(我认为)不需要。

最新更新