【问题标题】:Is the keyword "virtual" optional or mandatory in a overridable method? [duplicate]可覆盖方法中的关键字“virtual”是可选的还是必需的? [复制]
【发布时间】:2018-02-21 13:55:59
【问题描述】:

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

【问题讨论】:

  • 显示一些代码。你做错了什么,或者你的问题不够清楚。 始终包含您的代码
  • 你应该提供一个例子
  • 要覆盖一个方法,override 关键字是强制性的,而不是virtual
  • 不同的是,如果省略 virtual 关键字,则隐藏方法,而不是覆盖它。
  • @Crowcoder -- 编译器错误

标签: c# polymorphism virtual-functions


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-28
    相关资源
    最近更新 更多