繁体   English   中英

我可以使用System.Reflection.Emit将动态方法添加到现有类型吗?

[英]Can I add a dynamic method to an existing type using System.Reflection.Emit?

我刚开始学习Emit命名空间 - 以下是否有效? 这引发了一个异常:

public class EmitTest
{
    public void Test()
    {
        DynamicMethod dynMeth = new DynamicMethod("Foo", null, null, typeof(EmitTest));
        ILGenerator gen = dynMeth.GetILGenerator();
        gen.EmitWriteLine("Foo");
        gen.Emit(OpCodes.Ret);
        dynMeth.Invoke(null, null);
        dynamic d = this;
        d.Foo();
    }
}

反正有没有按照预期进行这项工作,还是DLR的限制? 在这里,我创建了一个新的void方法Foo(),并将其创建为EmitTest类的成员。 运行时说EmitTest上找不到Foo()

你误解了owner参数。
MSDN :(重点补充)

owner

与动态方法逻辑关联的类型。 动态方法可以访问该类型的所有成员。

您无法将方法添加到现有类型。

暂无
暂无

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

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