请考虑以下代码:
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());
}
}
}
当我尝试编译代码时,我得到一个"覆盖不能被标记为新的或虚拟的" "公共虚拟覆盖字符串Speak()"方法。我知道有很多方法,但我想知道C#背后的原因是什么,不允许虚拟文件覆盖摘要。
答案 0 :(得分:8)
覆盖其基本方法的方法是隐式虚拟的(除非使用sealed
关键字另有说明),您不需要指定它。
答案 1 :(得分:3)
来自MSDN