【发布时间】:2010-02-08 21:45:21
【问题描述】:
我通过在运行时使用 Reflection.Emit 创建自己的函数来学习 CIL。到目前为止,我真的很惊讶事情是多么容易,但是我遇到了一些我无法猜到的东西,而且我在文档中找不到任何相关的东西。
我正在尝试创建一个简单地打印我定义的非常简单的类的函数。如果我将代码更改为打印strings,比如说,它可以工作,但是当我传递我的类A 的实例时它总是无法运行。
奇怪的是我可以注释掉我的函数体,但它仍然失败并显示TargetInvocationException。这一定很简单,但我看不到发生了什么!
class A
{
public override string ToString()
{
return "AAA!";
}
}
class Program
{
static void Main(string[] args)
{
DynamicMethod func = new DynamicMethod("func", null, new Type[] { typeof(A) });
ILGenerator il = func.GetILGenerator();
//il.Emit(OpCodes.Ldarg_0);
//il.Emit(OpCodes.Box, typeof(A));
//il.Emit(OpCodes.Call, typeof(Console).GetMethod("WriteLine", new Type[] { typeof(A) }));
il.Emit(OpCodes.Ret);
func.Invoke(null, new object[] { new A() });
Console.Read();
}
}
我做错了什么来引发异常?为什么这只发生在我的课程中?
【问题讨论】:
标签: c# .net reflection cil dynamicmethod