2012年11月13日火曜日

c# 修飾子 new overrideの違い

やりたいこと
継承したときのメソッドにつける修飾子にnewとoverrideがあるけど、その違いについてまとめてみる。 現状わかっていることだけ.
準備
猫クラスと猫王クラスを準備する。まずは修飾子をつけない。
    class Cat
    {
        public void Cry()
        {
            Console.WriteLine("にゃお~");
        }
    }

    class CatKing : Cat
    {
        public void Cry()
        {
            Console.WriteLine("にゃお~猫王だぞ~");
        }
    }
そうすると警告はでるが、コンパイルは通る。警告はnewを使用してください。というような内容。
newの場合
基底クラスの型に代入すると、基底クラスのメソッドが呼び出される。
    class Program
    {
        static void Main(string[] args)
        {
            Cat tama = new CatKing();
            tama.Cry();

            Console.ReadLine();
        }
    }

    class CatKing : Cat
    {
        public new void Cry()
        {
            Console.WriteLine("にゃお~猫王だぞ~");
        }
    }

    class Cat
    {
        public void Cry()
        {
            Console.WriteLine("にゃお~");
        }
    }
結果は「にやお~」になる。
overrideの場合
基底クラスの型に代入しても、派生クラスのメソッドが呼び出される。
    class Program
    {
        static void Main(string[] args)
        {
            Cat tama = new CatKing();
            tama.Cry();

            Console.ReadLine();
        }
    }

    class CatKing : Cat
    {
        public override void Cry()
        {
            Console.WriteLine("にゃお~猫王だぞ~");
        }
    }

    class Cat
    {
        public virtual void Cry()
        {
            Console.WriteLine("にゃお~");
        }
    }
結果は「にゃお~猫王だぞ~」になる。
0 件のコメント:
コメントを投稿