(又是一个烦人的问题……)
在之前问过这个之后 - (这部分与我的问题有关) - 我得到了答案:
请参阅 C# 4 规范的第 7.6.5.1 节:
候选方法集减少为仅包含来自最派生类型的方法:对于集中的每个方法 CF,其中 C 是声明方法 F 的类型,从 C 的基类型中声明的所有方法都将从中删除集。
行。
我有这个代码://.Dump() is like a WriteLine command...
public class Base
{
public void Foo(string strings) { "1".Dump();}
public virtual void Foo(object strings) { "2".Dump();}
}
public class Child : Base
{
public override void Foo(object strings) { "4".Dump();}
}
但是这段代码:
Child c = new Child();
c.Foo("d");
发出:"1"
可是等等 ...
我们不是说过is reduced to contain only methods from the most derived types:
吗?
Child 有 1 个来自其父亲的函数public void Foo(string strings)
和一个NEARER 覆盖函数。
那么他为什么选择它的基地功能呢?继承的函数是否比覆盖更接近?
是否与覆盖在运行时有关?
请帮忙。
编辑
这种情况呢?
public class Base
{
public virtual void Foo(int x) { "1".Dump();}
}
public class Child : Base
{
public override void Foo(int x) { "2".Dump();}
public void Foo(object x) { "3".Dump();}
}
void Main()
{
Child c = new Child();
c.Foo(6); //emits "3"
}