私はこの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();
この例は、本 Pro DLR in .NET 4 から引用しました。なぜこの余分な作業を行っているのか理解できません。Book によると、コードがメモリ内のオブジェクトとして表現されると、IL 命令よりもはるかに簡単に分析できるからです。
最も混乱するのは、コードに ConsoleWriteline() メソッドの代わりに DLR 式を配置してコンソール アプリケーションを実行すると、同じ .exe ファイル (CIL コードを含む) が取得され、"Hello world" が記述されたファイルが表示されることです。 .exe ファイルが実行された結果としてのコンソール。どちらの場合も、実行される .exe ファイル (cil コード) を取得しますが、実行時にコードをデータとして表すオブジェクトがどこにあり、どのようにアクセスすればよいかわかりません。