可覆盖方法中的关键字 "virtual" 是可选的还是必需的?

Is the keyword "virtual" optional or mandatory in a overridable method?

在C#中,为什么我们在基class的方法中忘记了关键字"Virtual",在派生class中重新定义,却没有出现编译错误. 我了解到必须使用此关键字来覆盖方法
是不是 ?

public class Mother
{
    public  void  Speak()
    {
        Console.WriteLine("Mother !");
    }
}
public class Son : Mother
{
    public  void Speak()
    {
        Console.WriteLine("Son!!");
    }
}

应该是:

public class Mother
{
    public virtual  void  Speak()
    {
        Console.WriteLine("Mother !");
    }
}
public class Son : Mother
{
    public  override void Speak()
    {
        Console.WriteLine("Son!!");
    }
}

基本上,Virtual 和 Override 适用于动态绑定。动态绑定将在 run-time 时决定,编译器不知道在派生的 class 中将覆盖哪个虚拟方法。这就是为什么它不会给你一个错误。这将在 run-time 决定。哪个派生 class 将在 run-time 处使用。