C# virtual/overrideとnew 関数 2017/6

※ C#ではキーワードなしで基底クラスと派生クラスで同じ名称でメソッドは持つとコンパイルエラーとなる。
※ virtual / override キーワードは動的関数呼び出しが行われる。
※ new キーワードは静的関数呼び出しが行われる。

virtual / override キーワード
using System;

class Haha {
    public virtual void Kansu() {
        Console.WriteLine("Haha");
    }
}

class Taro : Haha {
    public override void Kansu() {
        Console.WriteLine("Taro");
    }
}

class Program2 {
    static void Main() {
        Haha obj1 = new Haha();
        Haha obj2 = new Taro();
        Taro obj3 = new Taro();
        
        obj1.Kansu();
        obj2.Kansu();
        obj3.Kansu();
    }
}
実行結果
Haha
Taro
Taro
実行時メモリ内の型で呼び出しメソッドを判断する -> 動的

new キーワード
using System;

class Haha {
    public void Kansu() {
        Console.WriteLine("Haha");
    }
}

class Taro : Haha {
    public new void Kansu() {
        Console.WriteLine("Taro");
    }
}

class Program2 {
    static void Main() {
        Haha obj1 = new Haha();
        Haha obj2 = new Taro();
        Taro obj3 = new Taro();
        
        obj1.Kansu();
        obj2.Kansu();
        obj3.Kansu();
    }
}
実行結果
Haha
Haha
Taro
コンパイル時の型で呼び出しメソッドを判断する -> 静的