C# - 为什么虚函数不能覆盖抽象函数?



考虑以下代码:

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());
        }
    }
}

当我尝试编译代码时,我将获得"覆盖效力,不能将"覆盖"标记为"新或虚拟"错误,而"公共虚拟覆盖字符串speen()"方法。我了解有些方面的方法,但是我想知道C#背后的原因是什么不允许虚拟替代摘要。

一种覆盖其基本方法的方法是隐式虚拟的(除非使用sealed关键字另有指定),您无需指定它。

来自msdn

  • 抽象方法隐含是一种虚拟方法。
  • 抽象方法声明仅在抽象类中允许。
  • 实施是通过覆盖方法提供的。
  • 抽象方法也可以在抽象类中覆盖。

最新更新