Динамические сборки и методы - PullRequest
7 голосов
/ 21 декабря 2011

Я программирую .NET и C # уже много лет, но только недавно столкнулся с типом DynamicMethod вместе с концепцией динамической сборки в контексте отражения.Кажется, они всегда используются при генерации IL (кода времени выполнения).

К сожалению, MSDN чрезвычайно плохо справляется с задачей определения , что такое динамическая сборка / метод в действительности , а также что их следует использоватьза.Может ли кто-нибудь просветить меня здесь, пожалуйста?Есть что-нибудь связанное с DLR?Чем они отличаются от статического (нормального) генерирования сборок и методов во время выполнения?Что я должен знать о том, как и когда их использовать?

1 Ответ

4 голосов
/ 23 декабря 2011

DynamicMethod используются для создания методов без какой-либо новой сборки.Они также могут быть созданы для класса, так что вы можете получить доступ к его закрытым членам.Наконец, класс DynamicMethod создаст делегата, который вы можете использовать для выполнения метода.Например, чтобы получить доступ к приватному полю:

var d = new DynamicMethod("my_dynamic_get_" + field.Name, typeof(object), new[] { typeof(object) }, type, true);
var il = d.GetILGenerator();
il.Emit(OpCodes.Ldarg_0);
il.Emit(OpCodes.Ldfld, field);
if (field.FieldType.IsValueType)
    il.Emit(OpCodes.Box, field.FieldType);
else
    il.Emit(OpCodes.Castclass, typeof(object));

il.Emit(OpCodes.Ret);
var @delegate = (Func<object, object>)d.CreateDelegate(typeof(Func<object, object>));

Надеюсь, это поможет.

...