2010年1月23日土曜日

BaseClass(基本クラス),DerivedClass(派生クラス)1,2で同名のMethodをvirtualキーワード、overrideキーワードを使用して仮想メソッドとして定義し、BaseClass型の変数を宣言してDerivedClass1,2のインスタンスを代入し、それぞれどのClassのMethodが呼び出されるのかを確認してみる。

using System;


class BaseClass
{
    public virtual void printOut()
    {
        Console.WriteLine("BaseClasee");
    }
}


class DerivedClass1 : BaseClass
{
    public override void printOut()
    {
        Console.WriteLine("DerivedClass1");
    }
}


class DerivedClass2 : BaseClass
{
    public override void printOut()
    {
        Console.WriteLine("DerivedClass2");
    }
}


class MainClass
{
    static void Main()
    {
        // BaselClass型の変数を宣言
        BaseClass sample;


        /* DerivedClass1のインスタンスを
         * Upcastして代入 */
        sample = new DerivedClass1();


        // 呼び出されるメソッドを確認
        sample.printOut();
        /* 出力値:DerivedClass1
         * overrideしたDerivedClass1の
         * printOut()が呼び出される */


        /* DerivedClass2のインスタンスを
         * Upcastして代入 */
        sample = new DerivedClass2();


        // 呼び出されるメソッドを確認
        sample.printOut();
        /* 出力値:DerivedClass2
         * overrideしたDerivedClass2の
         * printOut()が呼び出される */
    }
}

0 コメント:

コメントを投稿