代码之家  ›  专栏  ›  技术社区  ›  Mau

为什么C#没有非虚拟呼叫约定?

  •  3
  • Mau  · 技术社区  · 14 年前

    灵感来自 this SO question

    为什么C#没有非虚拟呼叫约定的关键字?

    EDIT:我的意思是“既然C编译器在默认情况下总是使用IL虚拟调用,为什么非虚拟IL调用没有关键字”?

    2 回复  |  直到 7 年前
        1
  •  2
  •   Andrey    14 年前

    这也许可以解释: http://blogs.msdn.com/b/ericgu/archive/2008/07/02/why-does-c-always-use-callvirt.aspx

    很快: call null 作为 this callvirt 只要有可能 无效的 指针投掷 NullReferenceException

        2
  •  3
  •   Community Mofi    4 年前

    why c# implements methods as non-virtual by default?

    引用Anders Hejlsberg的话

    有几个原因。一个是 人们用Java写代码,却忘了 因此,这些方法是虚拟的。 表现也不错。只是 相关的性能开销 问题。

    关于这个问题有两个学派 虚拟方法。学术学校 虚拟的,因为我可能想 总有一天会推翻的 思想流派,来自 构建运行在 虚拟的。”

    当我们在一个 平台,我们做了很多 关于它在未来发展的承诺 未来。对于非虚方法,我们 答应我当你打电话的时候 在API中发布一个虚拟方法,我们 不仅保证你打电话的时候 也要保证当你 这个方法,我们将在这里调用它 关于 在这个和那个不变量中。

    每次你在API中说虚拟的时候, 您正在创建回调挂钩。作为 OS或API框架设计师, 在任何一点上钩住 一个API,因为你不一定 做出那些承诺。人们可能 不完全理解他们的承诺

    资料来源: http://www.artima.com/intv/nonvirtual.html

    推荐文章