C# 是否可以使用System.Reflection.Emit将动态方法添加到现有类型?

C# 是否可以使用System.Reflection.Emit将动态方法添加到现有类型?,c#,.net,C#,.net,我刚开始学习Emit名称空间-以下内容有效吗?这会引发一个异常: public class EmitTest { public void Test() { DynamicMethod dynMeth = new DynamicMethod("Foo", null, null, typeof(EmitTest)); ILGenerator gen = dynMeth.GetILGenerator(); gen.EmitWriteLin

我刚开始学习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:(重点补充)

所有者

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


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

您说过它会引发异常,异常类型和消息是什么?顺便说一句,这与DLR无关。您右键编辑的标题反映了我看到的答案。DynamicMethod实际上只不过是一个委托,但它可以访问与其逻辑关联的类型的实例的成员。我误解了。