У меня есть этот код 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 в .NET 4. И я не понимаю, почему мы делаем эту дополнительную работу? Книга говорит, что причина в том, что как только код представлен в виде объектов в памяти, его гораздо легче проанализировать, чем инструкцию IL.
Что меня больше всего смущает:
Если я добавлю выражение DLR вместо метода ConsoleWriteline () в своем коде и запусту приложение консоли, я получу тот же файл .exe (который содержит код CIL), и в результате я получу «Hello world», записанный в консоли. исполняемый файл. Таким образом, в обоих случаях я получаю исполняемый файл .exe (cil-код), и Я не вижу, где находятся эти объекты, представляющие код в виде данных во время выполнения и как я могу получить к ним доступ?