用Reflection覆盖私有方法

时间:2009-09-20 19:23:05

标签: c# .net reflection override

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

4 个答案:

答案 0 :(得分:7)

嗯,需要virtual才能覆盖它(通过编写一个继承自该类的动态类型),并且你不能拥有private virtual(它不会感)。您可以覆盖internal virtual,但我怀疑这可能会遇到安全问题。所以最终,我会说不。

答案 1 :(得分:5)

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

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

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

这可能比它值得多麻烦。

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

答案 2 :(得分:1)

不使用反射。你需要使用某种AOP。

答案 3 :(得分:1)

Typemock Isolator应该能够做到这一点,但是通过.NET探查器API(根据{Osterove在The Art of Unit Testing中的说法)这样做。