0

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

4

1 回答 1

3

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

owner

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

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

于 2012-11-27T03:35:30.653 回答