关键字“虚拟”是否是可覆盖方法中的可选或必需的?

时间:2018-02-21 13:56:00

标签: c# polymorphism virtual-method

在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!!");
    }
}

1 个答案:

答案 0 :(得分:-1)

基本上,Virtual和Override适用于动态绑定。动态绑定将在运行时决定。编译器不知道哪个虚方法将在派生类中重写。这就是为什么它没有给你一个错误。这将在运行时决定。哪个派生类将在运行时使用。