これが 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);
}
}
Foo
inへの呼び出しは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);
}
}
Foo
inへの呼び出しは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)
、それからどのように呼び出すでしょうか?Derived
Program