読者です 読者をやめる 読者になる 読者になる

virtual

C# Sample

派生クラスメソッドの定義による基底クラスメソッドの隠蔽はnewで行った・・・。
newでは、派生クラスメソッドが呼ばれるか、基底クラスメソッドが呼ばれるかはインスタンスを代入したオブジェクト変数の型によって決まる・・・。

        BaseClass base = new DerivedClass();
        base.Output();

この場合、呼ばれるOutputは基底クラスメソッド・・・。
(この辺、前回説明入れ忘れてた・・・。)

一方、オーバーライドはインスタンスの型で決まる・・・。
オーバーライドはvirtualとoverrideを使う・・・。

基底クラスのOutputにはvirtualをつける・・・。
つまり仮想関数ということ・・・。

派生クラスのOutputにはoverrideをつける・・・。
基底クラスの同名メソッドをオーバーライドするということ・・・。

new DerivedClassで生成したインスタンスをBaseClassの変数overrideobjに入れている・・・。

それぞれ値をセット・・・。

それぞれOutput・・・。

i = 10, str = ABC
(i, str) = (20, XYZ)
(i, str) = (30, ZZZ)
続行するには何かキーを押してください . . .

変数はBaseClassでも、実際に呼ばれているOutputはDerivedClassのモノになっている・・・。

Sample/MainClass.cs at master · bg1bgst333/Sample · GitHub
Sample/BaseClass.cs at master · bg1bgst333/Sample · GitHub
Sample/DerivedClass.cs at master · bg1bgst333/Sample · GitHub