抽象类必须重写抽象方法吗?

时间:2019-07-20 17:47:49

标签: c#

让我们说这个抽象类:

abstract public class MyBase {

    abstract public int GetValue();

    <some concrete methods here>
}

现在,我想将其继承为另一个抽象类,实现GetValue()但添加新的抽象方法:

abstract public class MyBase2 : MyBase {

    abstract public int GetValue2();

    public override int GetValue() {
        // some code here
        return something;
    }

}

为什么必须为override指定MyBase2.GetValue()MyBase.GetValue()是否已被标记为abstract,因此自然会被MyBase继承的任何东西覆盖?

2 个答案:

答案 0 :(得分:4)

  

为什么必须为MyBase2.GetValue()指定重写?

这是c ++也已采用的范例。

这个想法是:通过明确地需要为overridevirtual使用关键字abstract,可以确保进行覆盖时不会打错字。因为如果您会发现这样的错字,那么行为,尤其是virtual上的行为将会发生很大变化。

话虽如此;我仍然感到奇怪的是,添加方法的new关键字仍然是可选的,并且仅在省略时才会发出警告。

答案 1 :(得分:1)

由于您的MyBase2也被标记为abstract,因此应告知编译器该类是GetValue()的实现,而不是层次结构更高的其他类(实现{{1 }})

相关问题