首页 > 解决方案 > 抽象类必须重写抽象方法吗?

问题描述

假设这个抽象类:

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;
    }

}

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

标签: c#

解决方案


为什么我必须为 MyBase2.GetValue() 指定覆盖?

这也是 C++ 采用的范式。

这个想法是:通过明确需要使用关键字overrideand virtualabstract您将确保在进行覆盖时不会打错字。因为如果你看到这样的错字,行为,特别是 onvirtual会发生显着变化。

话说回来; 我仍然觉得奇怪的是new添加方法的关键字仍然是可选的,并且只在省略时发出警告。


推荐阅读