是否有可能通过重写.NET 3.5中使用反射的私有方法?
Answer 1:
嗯,这将需要virtual
成为可能覆盖它(通过编写一个从类继承的动态类型),你不能有一个private virtual
(它没有任何意义)。 也许你可以重写的internal virtual
,但我怀疑即使这样可能会碰到的安全问题。 所以,最后,我说没有。
Answer 2:
不单独使用反思。 也许你能做的最好的就是用反射,结合Reflection.Emit的或CodeDom中的类复制到一个新的命名空间。 当你遇到你要替换的私有方法,你不要复制它,你散发出你的更换。
不过,也有很多技术开发人员可以使用,使这种技术多,更难。 打破类的实现为许多私人或内部类就是这样的。
注意:使用的CodeDOM你必须建立图在内存中,编译它,然后加载所得到的组件。
这可能是一个比它的价值LOT更多的麻烦。
另一种方式来做到这一点是使用反射器拆卸类,取代码,并建立自己的类从它的方法代替。 再有显著技术和法律障碍需要克服。 您可能会虽然学到了很多的反汇编代码。
Answer 3:
不使用反射。 你需要使用某种AOP的。
Answer 4:
Typemock隔离器应该是能够做到这一点,但这样通过.NET探查的API(根据罗伊Osherove在单元测试的艺术 )。
文章来源: Overriding a private method with Reflection