私はvirtual
メソッドに関するドキュメントを読んでいます:
仮想メソッド呼び出しでは、その呼び出しが行われるインスタンスの実行時型によって、呼び出す実際のメソッド実装が決まります。非仮想メソッドの呼び出しでは、インスタンスのコンパイル時のタイプが決定要因になります。正確に言うと、コンパイル時の型がCで実行時型がR(RはCまたはCから派生したクラス)のインスタンスで引数リストAを使用してNという名前のメソッドが呼び出されると、呼び出しは次のようになります。次のように処理されます...: http: //msdn.microsoft.com/en-us/library/aa645767 (v = vs.71).aspx
しかし、上で太字になっていることに気づきました。次のようなコードがあるとしましょう。
class Planet{
public string Name;
public float Size;
public virtual void SpinPlanet(){
Console.WriteLine("Hoooraaay!!!");
}
}
class Earth : Planet{
}
そして、私のコードのどこかで私はします:
Earth world = new Earth();
world.SpinPlanet();
この場合:
- Nは
SpinPlanet()
- Cは
Earth
- Rは
Planet
では、どうしてR
コンパイル時型の派生クラスを得ることができるのでしょうかC
。基本クラスタイプは実行時に解決されていませんか?