在C#中,可以虚拟化每个方法吗?

时间:2011-09-10 18:44:10

标签: c# override virtual

这可能会让很多C#程序员感到畏缩,但是virtual - ize 基类中的每个方法都可以 - 即使某些方法从未被覆盖过吗?

我需要这样做的原因是我有一个特殊情况,我需要让C#像Java一样行事。它实际上是Java程序的自动程序转换。

我正在考虑将任何没有基本方法的Java方法标记为virtual,并将任何具有关联基本方法的方法标记为override

除了缺乏灵活性之外,还有其他问题吗?

3 个答案:

答案 0 :(得分:7)

是的,没关系,但不一定是好的做法。虚拟化有两个方面:继承和解耦(用于单元测试或用新的类替换其他类)。 在OO设计中优先考虑组合而不是继承。您可以在类中使用接口而不是虚拟。这将为您提供单元测试和组合所需的内容。 但是,凭借今天CPU的速度,如果一切都是虚拟的,我不会非常担心额外的V表查找。

所以我建议,如果你可以通过为java程序提供一个接口来解决你的问题,那就去做吧。否则,不要因为使用虚拟方法而失眠。

答案 1 :(得分:5)

这不仅可以,但有些应用程序需要这个。

例如,

nHibernate 要求将属性标记为虚拟以进行映射。

答案 2 :(得分:1)

这没关系。不会因此导致不必要的行为,据我所知,虚方法不会导致类速度变慢。那么,为什么不呢?