C# 是否可以使用System.Reflection.Emit将动态方法添加到现有类型?
我刚开始学习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
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实际上只不过是一个委托,但它可以访问与其逻辑关联的类型的实例的成员。我误解了。