【发布时间】:2019-05-23 04:27:37
【问题描述】:
我是 C# 新手,只是一个关于多级继承的问题 假设我们有以下类:
Class Employee
{
public virtual void CalculateBonus() {
...
}
}
class SalesPerson : Employee
{
public override void CalculateBonus() {
...
}
}
假设我们有另一个派生自 SalesPerson 的类
class PTSalesPerson : SalesPerson
{
public override void CalculateBonus() {
...
}
}
所以我的问题很简单,基类中的 virtual 关键字需要被其子类覆盖。应用相同的逻辑,虚拟关键字也应该应用在 SalesPerson 类中:
class SalesPerson : Employee
{
public virtual override void CalculateBonus() {
... //compiler error
}
}
以便 PTSalesPerson 可以覆盖其父方法。 那么是否意味着“虚拟”关键字只需要出现在 1 级基类中?还是覆盖 = 覆盖 + 虚拟?
【问题讨论】:
-
您是否只是尝试了两种方式,看看会发生什么?嗯,是的,你做了,你得到了一个编译器错误。你为什么要问这个问题?
-
一旦一个方法在一个类中被声明为virtual,它也将在它的所有子类中隐式地是virtual,而不需要重用关键字。
-
PTSalesPerson 已经可以在没有任何帮助的情况下覆盖 CalculateBonus。这听起来很像您需要一种新方法,而不是CalculateBonus。这个新方法仍然可以调用CalculateBonus,如果合适的话,封装是另一个容易被忽视的oop 技术。调用这个新方法并不一定简单,调用者必须知道一个 Employee 对象至少是一个 SalesPerson。
is运算符可以帮助解决这个问题。