用虚拟方法覆盖抽象方法

我试图在子类中使用虚方法覆盖抽象类中的抽象方法。 我(假设到现在?)理解抽象方法和虚方法之间的区别。

显然我无法做到,但我的问题是……为什么? 基于此处接受的答案和以下场景,我只是没有看到问题:

public abstract class TopLevelParent { protected abstract void TheAbstractMethod(); } public class FirstLevelChild1 : TopLevelParent { protected override void TheAbstractMethod() { } } public class FirstLevelChild2 : TopLevelParent { protected virtual override void TheAbstractMethod() { //Do some stuff here } } public class SecondLevelChild : FirstLevelChild2 { //Don't need to re-implement the method here... my parent does it the way I need. } 

所以,我所做的就是有一个顶级父级,有两个inheritance子节点,另一个inheritance自其中一个inheritance子节点。 同样,根据我在上面发布的链接中接受的答案:

“一个虚函数,基本上是说看,这里的function对于子类来说可能是也可能不够好。所以如果它足够好,使用这个方法,如果没有,那么覆盖我,并提供你自己的function。 “

并且二级子级将从其父级inheritance虚拟方法,从而满足其最顶层父级的抽象方法的实现要求……问题是什么?

我错过了一些阻碍我理解这个问题的细节……

override方法隐式虚拟的(在某种意义上它可以在子类中重写),除非标记为sealed

注意:

 public class FirstLevelChild1 : TopLevelParent { protected override void TheAbstractMethod() { } } public class SecondLevelChild1 : FirstLevelChild1 { protected override void TheAbstractMethod() { } // No problem } public class FirstLevelChild2 : TopLevelParent { protected sealed override void TheAbstractMethod() { } } public class SecondLevelChild : FirstLevelChild2 { protected override void TheAbstractMethod() { } // Error: cannot override inherited member // 'FirstLevelChild2.TheAbstractMethod()' because it is sealed } 

abstract方法在inheritance链中一直是virtual的 – 没有必要在子类中声明它是virtual ,以允许子类覆盖它 – 子类已经可以覆盖它。

如果您提供实现,将使用最接近的实现(向下查看inheritance列表)。