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