可覆盖方法中的关键字 "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 处使用。
在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 处使用。