gpt4 book ai didi

c# - 防止继承链中的虚拟和覆盖

转载 作者:行者123 更新时间:2023-11-30 14:09:19 24 4
gpt4 key购买 nike

请注意:这是一个概念性问题,与生产特定代码无关。

假设我们有一个带有虚方法 GetBonus(int value) 的类 A

接下来,我们从这个类 B 派生一个类。在这个类 B 中,我们重写方法 GetBonus。

接下来,我们从类 B 派生一个类,称为类 C。

现在C类也可以覆盖A类的GetBonus方法

问题:

  1. C 类是否覆盖了 A 类或 B 类的方法定义?

  2. 在C类中,如何防止覆盖A类的方法?

  3. 在C类中,如何防止B类方法被覆盖?

我知道有一个 SEALED 关键字用于密封虚拟重写方法。但以上问题将帮助我消除疑虑。

最佳答案

问题 2 和 3 基本上可以归结为同一件事,sealed 确实是这里的答案。

也许你问的有点含糊,但你只能防止派生类中虚方法的重写。不在派生类本身。最后,对于问题2和3,你只有一个选择:

class A
{
public virtual void GetBonus(int value) { }
}

class B : A
{
public sealed override void GetBonus(int value) { } // We seal this method
}

class C : B
{
public override void GetBonus(int value) // This line is invalid
// because it cannot override the sealed member from class B.
{ }
}

这将防止方法 GetBonus 在派生类中被覆盖。

此示例还回答了问题 1。它给出了编译错误,因为 C 类对 GetBonus 的覆盖试图覆盖 B 类提供的版本,而不是提供的版本通过 A。这是真的,因为覆盖 A 中的那个显然会起作用,因为它不是 sealed

关于c# - 防止继承链中的虚拟和覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29963002/

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