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();
}
}
中间那个带评论的就是我要问的那个。
这是一个可以做的事情吗?它是传统的吗?关键词的顺序是否正确?这有关系吗?最正确的做法是什么?
在底层基类中定义的虚方法意味着该方法是虚的,调用它将执行最派生的实现。此行为由所有重写继承。
这意味着你只需要指定"override"关键字。基方法已经确保它是虚拟的,所以您不需要在重写中再次指定它。编译器甚至不允许你这样做。
同样,许多人会认为你应该"优先选择组合而不是继承",但那是另一个讨论。像你这样做多个覆盖是可以的,也是正确的。