C# 入門 & 実践 / C sharp

3-13. override // new / virtual


override は、前項の通り、完全上書きだが、new virtual を利用すると派生クラスのみに限定される。
表現は難しいが、以下のような結果になる。

+++++++++++++++++++++++++++
+ override
+++++++++++++++++++++++++++
    class HelloBase
    {
        public virtual void PrintHello()
        {
            Console.WriteLine("HelloBase");
        }
    }
    class HelloBase2 : HelloBase
    {
        public override void PrintHello()
        {
            Console.WriteLine("HelloBase 2");
        }
    }

    class Hello
    {
        static void Main(string[] args)
        {
            HelloBase hb = new HelloBase();
            hb.PrintHello();
            HelloBase2 hb2 = new HelloBase2();
            hb2.PrintHello();

            // 型指定は、Hellobaseでコンストラクタは、Hellobase2を使っている。

            HelloBase hb3 = new HelloBase2();
            hb3.PrintHello();

        }
    }

HelloBase
HelloBase 2
HelloBase 2
この3つ目が変わってくる。

+++++++++++++++++++++++++++
+ override
+++++++++++++++++++++++++++
    class HelloBase
    {
        public virtual void PrintHello()
        {
            Console.WriteLine("HelloBase");
        }
    }
    class HelloBase2 : HelloBase
    {
        public new virtual void PrintHello()
        {
            Console.WriteLine("HelloBase 2");
        }
    }

    class Hello
    {
        static void Main(string[] args)
        {
            HelloBase hb = new HelloBase();
            hb.PrintHello();
            HelloBase2 hb2 = new HelloBase2();
            hb2.PrintHello();

            // 型指定は、Hellobaseでコンストラクタは、Hellobase2を使っている。

            HelloBase hb3 = new HelloBase2();
            hb3.PrintHello();

        }
    }

HelloBase
HelloBase 2
HelloBase
これで、HellobaseのPrintHelloはオーバーライドされていないことがわかる。




3-12. ポリモーフィズム / 継承 / virtual / override « 3. C# 入門 / 基礎、型、文法、基本? » 3-14. 抽象クラス / abstract / override / sealed class

C# 入門 & 実践 / C sharp