繁体   English   中英

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

[英]In C#, is it ok to virtualize every method?

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

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

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

除了缺乏灵活性,这样做还有其他问题吗?

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM