C# - Why can't a virtual function override an abstract function?
本问题已经有最佳答案,请猛点这里访问。
请考虑以下代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; namespace TestApp { interface IMammalClass { string Speak(); } public abstract class absMammalClass : IMammalClass { public abstract string Speak(); } public class basePetClass : absMammalClass { public virtual override string Speak() { return"Make Noise"; } } public class DogClass : basePetClass { public override string Speak() { return"Bark"; } } class Program { static void Main(string[] args) { DogClass spot = new DogClass(); Console.Out.WriteLine(spot.Speak()); } } } |
当我试图编译代码时,我得到了"public virtual override string speak()"方法的"override cannot be marked as new or virtual"错误。我知道有很多方法可以解决这一问题,但我想知道C的推理是什么,不允许虚拟机覆盖抽象。
重写其基方法的方法是隐式虚拟的(除非用
来自MSDN
- 抽象方法是隐式的虚拟方法。
- 抽象方法声明只允许在抽象类中使用。
- 实现由重写方法提供。
- 抽象方法也可以在抽象类中重写。