型リファレント オブジェクトに基づくメソッド オーバーライドの場合は、メソッド呼び出しが決定されます。オブジェクトのタイプに基づいてメソッドを非表示にする場合、メソッド呼び出しが決定されます。
オーバーライド+非表示でのメソッド呼び出しの決定を誰かが説明してくれますか?
public class Base
{
public virtual void DoIt()
{
}
}
public class Derived : Base
{
public override void DoIt()
{
}
}
public class Derived1 : Derived
{
public new void DoIt()
{
}
}
class Program
{
static void Main(string[] args)
{
Base b = new Derived();
Derived d = new Derived();
#1 b.DoIt(); // Calls Derived.DoIt
#2 d.DoIt(); // Calls Derived.DoIt
b = new Derived1();
d = new Derived1();
#3 b.DoIt(); // Calls Derived.DoIt
#4 d.DoIt();
}
}
#1 と #2 は、ランタイム ポリモーフィズムのために Derived.DoIt を呼び出します。
#4 は Derived.DoIt を呼び出しました。これは、d が Dreived 型であるためです (メソッドの隠蔽)。
しかし、なぜ #3 が Derived.DoIt を呼び出したのでしょうか。
c# でオーバーライドと非表示を行う場合の呼び出しシーケンスは何ですか。
前もって感謝します