为什么Java中的方法默认是虚拟的,而C#中的方法是非虚拟的呢?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (12)

在Java中,默认情况下方法是虚拟的;C#则相反。

哪个更好?每种方法的优缺点是什么?

提问于
用户回答回答于

Java的方法更简单,C#的方法在默认情况下更细粒度、更安全和更高效。

用户回答回答于

Anders Hejlsberg: (C#首席架构师)

有几个原因。一个是性能。我们可以观察到,随着人们使用Java编写代码,他们忘记了最终标记他们的方法。因此,这些方法是虚拟的。因为他们是虚拟的,他们表现不佳。作为一种虚拟方法只会带来性能开销。这是一个问题。 更重要的问题是版本控制。有两种关于虚拟方法的思想流派。学术派别说:“一切都应该是虚拟的,因为有一天我可能会重写它。” 实际的思想学派来自构建真实世界中运行的真实应用程序,他说:“我们必须真正小心虚拟的东西。” 当我们在一个平台上做出虚拟的东西时,我们对它将来如何发展做出了很多的承诺。对于非虚拟方法,我们保证当你调用这个方法时,x和y会发生。当我们在API中发布一个虚拟方法时,我们不仅保证当你调用这个方法时,x和y会发生。我们也承诺,当你重写这个方法时,我们将在这个特定的序列中对它们进行调用,并且状态将在这个和那个不变中。 每次你在API中说虚拟的时候,你都会创建一个回调钩。作为一名操作系统或API框架设计师,您必须非常小心。您不希望用户覆盖并挂接API中的任意点,因为您不一定能够做出这些承诺。人们可能不完全理解他们在做出虚拟事物时所做出的承诺。

扫码关注云+社区