(また迷惑な質問です... )
以前にこれを尋ねた後-(これは私の質問に部分的に関連しています)-私は答えを得ました:
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:
か?
子には、その父親からの 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"
}