C# 关键字“virtual”在可重写方法中是可选的还是必需的?

C# 关键字“virtual”在可重写方法中是可选的还是必需的?,c#,polymorphism,virtual-functions,C#,Polymorphism,Virtual Functions,在C语言中,为什么即使在基类的方法中忘记了关键字Virtual(在派生类中重新定义),也不会出现编译错误。 我了解到,这个关键字是重写方法所必需的 不是吗 public class Mother { public void Speak() { Console.WriteLine("Mother !"); } } public class Son : Mother { public void Speak() { Cons

在C语言中,为什么即使在基类的方法中忘记了关键字Virtual(在派生类中重新定义),也不会出现编译错误。 我了解到,这个关键字是重写方法所必需的 不是吗

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在动态绑定上工作。动态绑定将在运行时决定,编译器不知道哪个虚拟方法将在派生类中重写。这就是为什么它不会给你一个错误。这将在运行时决定。运行时将使用哪个派生类

显示一些代码。你做错了什么,或者你的问题不够清楚。始终包含您的代码。您应该提供一个示例要重写方法,override关键字是必需的而不是虚拟的。区别在于,如果您忽略了virtual关键字,而不是重写它,则隐藏了该方法。@Crowcoder-编译器错误