我已经编写 .NET 和 C# 多年了,但直到最近才遇到这种DynamicMethod
类型以及反射上下文中的动态程序集的概念。它们似乎总是在 IL(运行时代码)生成中使用。
不幸的是,MSDN 在定义动态程序集/方法实际是什么以及它们应该用于什么方面做得非常糟糕。有人可以在这里启发我吗?与DLR有什么关系吗?它们与运行时静态(正常)生成程序集和方法有何不同?我应该知道如何以及何时使用它们?
我已经编写 .NET 和 C# 多年了,但直到最近才遇到这种DynamicMethod
类型以及反射上下文中的动态程序集的概念。它们似乎总是在 IL(运行时代码)生成中使用。
不幸的是,MSDN 在定义动态程序集/方法实际是什么以及它们应该用于什么方面做得非常糟糕。有人可以在这里启发我吗?与DLR有什么关系吗?它们与运行时静态(正常)生成程序集和方法有何不同?我应该知道如何以及何时使用它们?
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>));
希望能帮助到你。