不确定这是否特定于 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)
。
我的理解是它应该总是像第二个例子一样解决。
这是一个“错误”还是只是我缺乏理解(或无知)?
更新:
感谢您的回答。正如我所发现的,可以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)
in Derived
。
Foo(object,DayOfWeek)
从那时起如何调用Derived
而不必在其中创建“冗余”方法Program
?