【发布时间】:2020-01-20 06:47:32
【问题描述】:
为什么输出是B5,谁能解释一下?
class A
{
public virtual void M(int x=5)
Console.Write("A"+x);
}
class B:A
{
public override void M(int x=6)
Console.Write("B"+x);
}
class Program
{
static void Main(string[] args)
{
A a = new B();
a.M();
}
}
//Output is : B5
我希望输出是 B6,但实际输出是 B5。
【问题讨论】:
-
它是编译器错误吗?我在 VS2017 中调试代码,并在 B.M() 上按预期调用断点,但 x 实际上是 5,因为方法签名指示 6... 存在默认参数值的多态性中断。编译器至少应该在默认值更改或按预期使用时发出警告。
-
是的,这就是问题所在:这是一个错误还是这种行为背后有某种意义。解释很简单,但我的问题是为什么它会这样工作。希望有人能回答这个问题。