次のコードでは、基本クラスがパラメーターのデフォルト値をまったく宣言せず、派生クラスが True をデフォルトとして宣言しているにもかかわらず、Method2 の呼び出しは Value パラメーターを False として受け取ります。
コンパイラは基本クラスのメソッド宣言を最初に使用すると主張することができます (同様の例で行われたように: C# オーバーライドされたメソッドのオプション パラメーター) (この動作は Method1 への呼び出しの前に を付けることで変更できるため、これは事実ですthis.
)。この場合、ベースはデフォルト値をまったく宣言しません。
これについて合理的な説明はありますか?
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