覆盖使用反射的私有方法(Overriding a private method with Refle

2019-08-08 05:41发布

是否有可能通过重写.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