これが C# 4+ 固有のものかどうかはわかりませんが、これに気付きました。
次のクラスを検討してください。
class Base
{
protected void Foo(object bar, DayOfWeek day)
{
}
}
class Program : Base
{
protected void Foo(object bar, object baz)
{
}
void Bar(DayOfWeek day)
{
Foo(new { day }, day);
}
}
Fooinへの呼び出しはBarに解決されFoo(object, object)ます。
それを次のように変更しながら:
class Base
{
}
class Program : Base
{
protected void Foo(object bar, object baz)
{
}
protected void Foo(object bar, DayOfWeek day)
{
}
void Bar(DayOfWeek day)
{
Foo(new { day }, day);
}
}
Fooinへの呼び出しはBarに解決されFoo(object, DayOfWeek)ます。
私の理解では、2 番目の例のように常に解決する必要があります。
これは「バグ」ですか、それとも私の理解不足 (または無知) ですか?
アップデート:
答えてくれてありがとう。私が見つけたようbase.に、基本クラスでメソッドを呼び出すために使用できます。ただし、ミックスに別の派生クラスを追加すると、問題が再発します。
class Base
{
protected void Foo(object bar, DayOfWeek day)
{
}
}
class Program : Base
{
protected void Foo(object bar, object baz)
{
}
void Bar(DayOfWeek day)
{
base.Foo(new { day }, day);
}
}
class Derived : Program
{
void Baz(DayOfWeek day)
{
base.Foo(new { day }, day);
}
}
base.呼び出しは で機能しますがProgram、 に解決さFoo(object, object)れDerivedます。
で「冗長な」メソッドを作成することなくFoo(object,DayOfWeek)、それからどのように呼び出すでしょうか?DerivedProgram