如何使用Reflection.Emit创建方法有很多线程,但我无法在克隆或复制现有方法上找到任何方法。
我想复制一个现有的类并为其添加一些额外的字段。我在复制方法时遇到问题。我已经读过你不能简单地从体内获取IL代码,因为代币与现有模块有关。是否可以使用MethodBuilder克隆或复制类方法另一个类?
答案 0 :(得分:3)
嗯,有可能但非常尴尬。问题是MethodBody类只允许您将IL检索为字节数组。但是,ILGenerator.Emit()方法没有重载只是将这些字节复制到动态方法中。它要求您使用适当的重载来生成正确的IL指令。
重要的是,不仅要确保始终生成正确的IL,还要用它来收集有关动态方法的信息。特别是方法所需的堆栈大小。能够使用ILGenerator.Emit()的唯一方法是编写首先将字节反编译为相应IL指令的代码。这不是不可能的,只需要做很多工作。我想不出捷径。
答案 1 :(得分:0)
查看PostSharp及其基础技术。