hel*_*rld 3 c# polymorphism inheritance
请注意:这是一个概念性问题,与特定于生产的代码无关。
假设我们有一个带有虚拟方法GetBonus(int value)的Class A
接下来,我们从该类派生一个类,称为类B。在该类B中,我们重写方法GetBonus。
接下来,我们从B类派生一个名为C类的类。
现在,类C也可以覆盖类A的GetBonus方法。
题:
C类是否覆盖A类或B类的方法定义?
在C类中,如何防止A类方法的重载?
在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.
{ }
}
Run Code Online (Sandbox Code Playgroud)
这将防止方法GetBonus在派生类中被覆盖。
此示例还回答了问题1。它给出了编译错误,因为类C的替代GetBonus试图覆盖类提供的版本,B而不是类提供的版本A。这是正确的,因为从中覆盖一个A显然是可行的,事实并非如此sealed。