C# 中的方法可以覆盖另一个方法并同时是虚拟的吗?
Can a method in C# override another method and be virtual at the same time?
抱歉,如果这是一个愚蠢的问题或者已经有人问过了;我试过谷歌搜索,但我现在真的无法测试这个……所以这里是:
想象一下这个场景:
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();
}
}
中间有评论的就是我要问的那个。
这样可以吗?它是传统的吗?关键字的顺序是否正确?有关系吗?最正确的方法是什么?
底层库中定义的虚方法class表示该方法是虚方法,调用它会执行最派生的实现。此行为由所有覆盖继承。
这意味着您只需要指定"override"关键字。基本方法已经确保它是虚拟的,因此您不需要在覆盖中再次指定它。编译器甚至不允许你这样做。
此外,许多人会争辩说您应该 "favor composition over inheritance",但那是另一回事了。像您一样进行多次覆盖是正确的。
抱歉,如果这是一个愚蠢的问题或者已经有人问过了;我试过谷歌搜索,但我现在真的无法测试这个……所以这里是:
想象一下这个场景:
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();
}
}
中间有评论的就是我要问的那个。
这样可以吗?它是传统的吗?关键字的顺序是否正确?有关系吗?最正确的方法是什么?
底层库中定义的虚方法class表示该方法是虚方法,调用它会执行最派生的实现。此行为由所有覆盖继承。
这意味着您只需要指定"override"关键字。基本方法已经确保它是虚拟的,因此您不需要在覆盖中再次指定它。编译器甚至不允许你这样做。
此外,许多人会争辩说您应该 "favor composition over inheritance",但那是另一回事了。像您一样进行多次覆盖是正确的。