多级继承中的重写方法

时间:2013-12-11 23:02:39

标签: c#

给出三个父/子类,如下所示:

class A {
    public virtual void doSomething() {
        //do things
    }
}

class B : A {
    public override /*virtual?*/ void doSomething() {
        //do things
        base.doSomething();
    }
}

class C : B {
    public override void doSomething() {
        //do things
        base.doSomething();
    }
}

B的{​​{1}}方法在其签名中是否同时包含doSomething()override,因为它也被virtual类覆盖,或者只有班级C在其A方法签名中有virtual吗?

2 个答案:

答案 0 :(得分:7)

如果某个方法已在其中一个超类中标记为虚拟,则您不需要(读取:您不能)将该方法标记为虚拟。

该方法将在整个继承树中保持虚拟,直到子类将其标记为sealed。然后,任何子类都不能覆盖密封方法。

答案 1 :(得分:5)

来自MSDN

  

您无法使用静态虚拟修饰符来   修改覆盖方法。

此外,

  

重写的基本方法必须虚拟抽象覆盖

意味着可以覆盖已标记为覆盖的方法。