[C#] upcastとvirtual

SomeClass someObject;

と宣言されているときに以下の呼び出しをコンパイルする。

someObject.SomeMethod();

通常、SomeMethodで呼び出される実体はコンパイル時に確定する。
virtualなmethodを持つ親class(base class)に子classのobjectを代入するupcastをした場合には事情が変わる。
親class(base class)でvirtual宣言されているmethodの場合には、以下のようにして子classで同じ名前同じ引数のmethodを定義できる。

class SomeClass : BaseClass
{
   .....
   public override void SomeMethod()
    {
       ....
    }
}

SomeMethodが、子クラス(SomeClass)でoverrideしているmethodを使うか、親クラス(BaseClass)のものを使うかは、実行時にsomeObjectに何が代入されているかどうかに依存する。

広告
%d人のブロガーが「いいね」をつけました。