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

时间:2012-11-27 03:31:15

标签: c# .net

我刚刚开始学习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()

1 个答案:

答案 0 :(得分:2)

您误解了owner参数 MSDN says :(强调补充)

  

owner

     
    

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

  

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