不确定这是否是 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)
.
我的理解是,它应该始终像第二个示例中那样解决。
这是一个“错误”还是只是我缺乏理解(或无知)?
Update:
感谢您的回答。据我发现,人们可以使用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);
}
}
The base.
呼叫工作于Program
,但随后决定Foo(object, object)
in Derived
.
一个人会怎样打电话Foo(object,DayOfWeek)
from Derived
然后不必创建“冗余”方法Program
?