c# – 使用虚拟方法覆盖抽象方法
发布时间:2020-12-15 18:21:30 所属栏目:百科 来源:网络整理
导读:我试图在子类中使用虚方法覆盖抽象类中的抽象方法.我(假设到现在?)了解抽象方法和虚方法之间的区别. 显然我无法做到,但我的问题是……为什么?基于接受的答案here和以下场景,我只是没有看到问题: public abstract class TopLevelParent { protected abstra
我试图在子类中使用虚方法覆盖抽象类中的抽象方法.我(假设到现在?)了解抽象方法和虚方法之间的区别.
显然我无法做到,但我的问题是……为什么?基于接受的答案here和以下场景,我只是没有看到问题: 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. } 所以,我所做的就是让一个顶级父级有两个继承子级,另一个继承自其中一个继承子级.同样,根据我在上面发布的链接中接受的答案:
并且第二级子级将从其父级继承虚拟方法,从而满足其最顶层父级的抽象方法的实现要求……问题是什么? 我错过了某些阻碍我对此理解的细节…… 解决方法
除非标记为
sealed ,否则
override 方法是隐式虚拟的(在某种意义上它可以在子类中重写).
注意: 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 } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |