C# 关键字“virtual”在可重写方法中是可选的还是必需的?
在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
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-编译器错误