.NET:使用Reflection.Emit动态克隆现有方法

时间:2010-09-05 16:44:27

标签: .net methods reflection.emit

如何使用Reflection.Emit创建方法有很多线程,但我无法在克隆或复制现有方法上找到任何方法。

我想复制一个现有的类并为其添加一些额外的字段。我在复制方法时遇到问题。我已经读过你不能简单地从体内获取IL代码,因为代币与现有模块有关。是否可以使用MethodBuilder克隆或复制类方法另一个类?

2 个答案:

答案 0 :(得分:3)

嗯,有可能但非常尴尬。问题是MethodBody类只允许您将IL检索为字节数组。但是,ILGenerator.Emit()方法没有重载只是将这些字节复制到动态方法中。它要求您使用适当的重载来生成正确的IL指令。

重要的是,不仅要确保始终生成正确的IL,还要用它来收集有关动态方法的信息。特别是方法所需的堆栈大小。能够使用ILGenerator.Emit()的唯一方法是编写首先将字节反编译为相应IL指令的代码。这不是不可能的,只需要做很多工作。我想不出捷径。

答案 1 :(得分:0)

查看PostSharp及其基础技术。