繁体   English   中英

在C#反射中使用IL生成器在静态字段上调用方法

[英]Invoke method on static filed using IL generator in C# reflection

我通过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 ,因为(我认为)不需要。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM