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

万年素人からHackerへの道

万年素人がHackerになれるまで殴り書きするぜ。

C# Unity ポリモーフィズム実験

Personとそれを継承したTaro作る

public class Person
{
    public string name; // 名前.
    public int age;  // 年齢.

    public virtual void Say()
    {
        Debug.Log("person");
    }
}

public class Taro : Person
{
    public override void Say()
    {
        Debug.Log("I am taro");
    }
}

実行させてみる。

    void Start () {
        Person p1 = new Person();
        p1.name = "YAMADA ICHIRO";
        p1.age  = 11;
        p1.Say(); // => person ・・・【A】

        Person p2 = new Taro();
        p2.name = "Tanaka Taro";
        p2.age  = 19;
        p2.Say(); // => I am taro ・・・【B】
        ((Person)p2).Say(); // => I am taro ・・・【D】

        Person[] persons = new Person[]{
            p1,
            p2,
        };

        foreach(var person in persons)
        {
            person.Say ();
        }
        =>  person、次はI am taro【D】
    }

Aはわかる。

newした時の型を見ているのだろうか? Bは親ではなく継承した子クラスのメソッド

キャストしたら親クラスのメソッドになると思ったがCは・・またもや子のメソッド

Dは一旦配列に入れたが、それでもnewした時のメソッドになっている。