我有这个 c# 代码:
Console.Writeline("Hello World");
如果我想使用 DLR 表达式执行此操作,它看起来像这样:
MethodInfo method = typeof(Console).GetMethod("WriteLine", new Type[] { typeof(String) });
Expression callExpression = Expression.Call(null, method, Expression.Constant("Hello World"));
Action callDelegate = Expression.Lambda<Action>(callExpression).Compile();
callDelegate();
我从 .NET 4 中的 Pro DLR 一书中举了这个例子。我不明白我们为什么要做这些额外的工作?Book 说原因是一旦代码被表示为内存中的对象,它就比 IL 指令更容易分析。
最让我困惑的是:如果我在我的代码中放置 DLR 表达式而不是 ConsoleWriteline() 方法并运行我的控制台应用程序,我将得到相同的 .exe 文件(包含 CIL 代码),我将得到写在由于 .exe 文件正在执行而导致的控制台。因此,在这两种情况下,我都会得到执行的 .exe 文件(cil 代码),但我看不到那些在运行时将代码表示为数据的对象在哪里以及如何访问它们?