Динамические сборки и методы
Я программировал.NET и C# в течение многих лет, но только недавно столкнулся с DynamicMethod
тип вместе с концепцией динамической сборки в контексте отражения. Кажется, они всегда используются при генерации IL (кода времени выполнения).
К сожалению, MSDN чрезвычайно плохо справляется с определением, что такое динамическая сборка / метод, а также для чего они должны использоваться. Может ли кто-нибудь просветить меня здесь, пожалуйста? Есть что-нибудь связанное с DLR? Чем они отличаются от статического (нормального) генерирования сборок и методов во время выполнения? Что я должен знать о том, как и когда их использовать?
1 ответ
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>));
Надеюсь, поможет.