我意识到这是一个非常奇怪的问题。我只想说我有理由。 (我倾向于写很长很冗长的问题;我想简短地写一下。)
如果我有某种类型T
,我可以使用反射定义新类型,我们称之为T2
,它基本上与{{1}相同}?我正在寻找的本质上是一种动态的方法来完成相同的操作,如果我在两个单独的源代码文件中编写完全相同的代码(类名除外)并编译它们。
答案 0 :(得分:3)
我认为没有一种神奇的子弹方法可以帮助你,但可以使用Reflection Emit进行操作。
这是关于部分主题的a nice tutorial。从那里开始,然后向上移动到一些sister articles。
答案 1 :(得分:1)
Randolpho的链接应该指向正确的方向。至于发出相同的功能,您可以通过调用X.GetMethodBody().GetILAsByteArray()
从方法中检索IL,其中X是MethodInfo的给定实例。但是,仍然需要在新方法中对其进行转换和重新发布,因为据我所知,没有直接的方法将IL [1]的IL流作为IL写入特定的ILGenerator。
Haibo Luo从2005年开始blog post就可以指出你正确的翻译方向(我没有尝试过,所以我无法验证它是否有效)。
答案 2 :(得分:0)
您可以使用MethodBodyReader或CCI或Cecil等工具复制依赖System.Reflection.Emit类型+ traverse和克隆方法体的类型结构。但是如果源类型中的方法使用了一些内部字段或调用内部方法,或者可能使用外部类的属性(在内部类的情况下)...那么你将得到无效的代码。要更正它,您新创建的类型应该放在原始类型附近。幸运的是塞西尔和CCI可以做到这一点。