gpt4 book ai didi

c# - 叶节点类中的 sealed 关键字

转载 作者:太空宇宙 更新时间:2023-11-03 17:22:48 25 4
gpt4 key购买 nike

虽然我知道出于安全原因可以使用 sealed,但有些人在叶节点上使用 sealed 关键字作为优化技术。

这对优化有何帮助?为什么编译器不够聪明,无法自己解决这个问题?

最佳答案

假设您有一个在叶类中被覆盖的虚方法。这肯定不会被进一步覆盖,因此 JIT 编译器可能会潜在地为已知属于该叶类的目标内联调用该方法。请注意,我不知道 JIT 是否实际上执行了此优化。

请注意,在 Java 中,HotSpot JVM 甚至可以对非最终类执行此优化,因为它是一个多 channel JIT:它可以乐观地假设没有任何东西会覆盖虚拟方法,然后在出现错误时撤消其优化加载的类确实覆盖了它。当然,由于方法在 Java 中默认是虚拟的,这比在 C# 中更重要。 (即使默认值不应该很重要,但它们显然很重要。)

我个人不使用 sealed,特别是出于优化或安全原因:我使用它是因为(正确地)设计继承很难。我同意“为继承而设计或禁止它”的概念,并且通常发现无法从类派生的偶尔痛苦可以通过不必担心继承的自由来弥补。 YMMV.

关于c# - 叶节点类中的 sealed 关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3132453/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com