C#中的方法可以覆盖另一个方法并且同时是虚拟的吗?

时间:2016-11-03 11:31:10

标签: c# inheritance override virtual

很抱歉,如果这是一个愚蠢的问题,或者已经被问过;我试过谷歌搜索,我现在不能真正测试这个......所以这里有:

想象一下这种情况:

public class Bottom
{
    virtual public void foo()
    {
        doTheThing();
    }
}

public class Middle : Bottom
{
    virtual override public void foo() //this function will both override the parent's foo() and letting its child's foo() be over ridden
    {
        base.foo();
        doTheOtherThing();
    }
}

public class Top : Middle
{
    override public void foo() 
    {
        base.foo();
        doTheFinalThing();
    }
}

评论的中间评论是我要问的问题。

这是一件好事吗?它是传统的吗?关键字的顺序是否正确?有关系吗?最正确的方法是什么?

1 个答案:

答案 0 :(得分:0)

底部基类中定义的虚方法意味着该方法是虚拟的,并且对它的调用将执行最派生的实现。所有覆盖都继承此行为。

这意味着您只需要指定“override”关键字。基本方法已经确保它是虚拟的,因此您不需要在覆盖中再次指定它。编译器甚至不允许你这样做。

此外,很多人会争辩说你应该“赞成作文而不是继承”,但那是另一种讨论。像你这样做多次覆盖是正确的。