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

本文关键字:方法 另一个 虚拟 覆盖 一个 | 更新日期: 2023-09-27 18:16:02

对不起,如果这是一个愚蠢的问题,或者如果它已经被问到;我试着用谷歌搜索了一下,但我现在还不能测试这个……这里是:

想象一下这个场景:

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

中间那个带评论的就是我要问的那个。

这是一个可以做的事情吗?它是传统的吗?关键词的顺序是否正确?这有关系吗?最正确的做法是什么?

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

在底层基类中定义的虚方法意味着该方法是虚的,调用它将执行最派生的实现。此行为由所有重写继承。

这意味着你只需要指定"override"关键字。基方法已经确保它是虚拟的,所以您不需要在重写中再次指定它。编译器甚至不允许你这样做。

同样,许多人会认为你应该"优先选择组合而不是继承",但那是另一个讨论。像你这样做多个覆盖是可以的,也是正确的。