在下面的代码中,对 Method2 的调用将 Value 参数接收为 False,即使基类根本没有为参数声明默认值,而派生类将 True 声明为默认值。
可以争论(正如在类似示例中所做的那样:C# optional parameters on overridden methods)编译器首先使用基类的方法声明(这是真的,因为可以通过在对 Method1 的调用前this.
加上在这种情况下,base 根本没有声明默认值。
对此有合理的解释吗?
using System;
class Base
{
public virtual bool Method1(bool Value) { return true; }
public virtual bool Method2(bool Value) { return true; }
}
class Derived : Base
{
public override bool Method1(bool Value = true)
{
return Value;
}
public override bool Method2(bool Value = true)
{
return Method1();
}
}
class Program
{
static void Main(string[] args)
{
Derived a = new Derived();
Console.WriteLine("Call to Method1, expected: True, got: {0}", a.Method1());
Console.WriteLine("Call to Method2, expected: True, got: {0}", a.Method2());
}
}
输出:
调用 Method1,预期:True,得到:True 调用 Method2,预期:True,得到:False