【发布时间】:2012-09-03 05:18:01
【问题描述】:
不确定这是否特定于 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);
}
}
在Bar 中对Foo 的调用解析为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);
}
}
在Bar 中对Foo 的调用解析为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 中有效,但随后解析为 Derived 中的 Foo(object, object)。
如何从Derived 调用Foo(object,DayOfWeek) 而不必在Program 中创建“冗余”方法?
【问题讨论】:
标签: c# .net overload-resolution