动态装配和方法

Nol*_*rin 7 .net c# reflection dynamicmethod dynamic-assemblies

我已经编写了.NET和C#多年,但最近才DynamicMethod在反射的上下文中遇到了类型和动态汇编的概念.它们似乎总是在IL(运行时代码)生成中使用.

不幸的是,MSDN在定义动态汇编/方法属性以及它们应该用于什么方面做得非常糟糕.能不能在这里启发我吗?与DLR有什么关系吗?它们如何与运行时静态(正常)生成的程序集和方法不同?我应该知道如何以及何时使用它们?

Ivo*_*Ivo 5

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>));
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你。