用Reflection覆盖私有方法

是否可以通过在.NET 3.5中使用Reflection来覆盖私有方法?

好吧,它需要是virtual才能覆盖它(通过编写从类inheritance的动态类型),并且你不能拥有private virtual (它没有意义)。 您可以覆盖internal virtual ,但我怀疑这可能会遇到安全问题。 所以最终,我会说不。

不仅仅使用reflection。 也许您可以做的最好的事情是使用Reflection,结合Reflection.Emit或CodeDom将类复制到新的命名空间中。 当您遇到要替换的私有方法时,不要复制它,而是放弃替换。

但是,开发人员可以使用许多技术来使这种技术变得更加困难。 将类的实现分解为许多私有或内部类就是这样的。

注意:使用CodeDom,您必须在内存中构建图形,编译它,然后加载生成的程序集。

这可能比它的价值更麻烦。

另一种方法是使用Reflector来反汇编类,使用方法replace来获取代码并从中构建自己的类。 同样需要克服重大的技术和法律障碍。 您可以从反汇编代码中学到很多东西。

不是通过使用reflection。 你需要使用某种AOP。

Typemock Isolator应该能够做到这一点,但是通过.NET Profiler API实现这一点(根据Roy Osherove的“unit testing艺术” )。