【问题标题】:In C#, is it ok to virtualize every method?在 C# 中,可以虚拟化每个方法吗?
【发布时间】:2011-09-10 18:44:09
【问题描述】:

这可能会让很多 C# 程序员望而却步,但是 virtual-ize 每个方法 在基类中是否可以——即使某些方法从未被覆盖?

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

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

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

【问题讨论】:

  • 它与接口没有什么不同。所以继续吧。
  • 好的,约翰,我不会感激的。 :)

标签: c# overriding virtual


【解决方案1】:

是的,这没关系,但不一定是一个好习惯。虚拟化有助于两件事:继承和解耦(用于单元测试或用新类替换其他类)。 在您的 OO 设计中更喜欢组合而不是继承,并且您可以在类中使用接口而不是虚拟。这将为您提供单元测试和组合所需的东西。 但是,以当今 CPU 的速度,如果一切都是虚拟的,我不会非常担心额外的 V 表查找。

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

【讨论】:

    【解决方案2】:

    这不仅没问题,有些应用程序也需要这样做。

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

    【讨论】:

      【解决方案3】:

      没关系。不会有由此引起的不良行为,据我所知,虚拟方法不会导致类变慢。那么,为什么不呢?

      【讨论】:

      • 虚拟调用会带来可衡量的性能损失,但它是纳秒级的。通常有一些更大的东西应该首先优化。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-05
      • 1970-01-01
      • 1970-01-01
      • 2011-02-19
      • 2018-04-18
      • 1970-01-01
      • 2014-09-20
      相关资源
      最近更新 更多