2010年1月23日土曜日

BaseClass(基本クラス)をMethodをOverrideできるようにvirtualキーワードを使用して定義し、そのBaseClassのMethodをDerivedClass(派生クラス)1,2でそれぞれ隠蔽、Overrideして定義する。そして、BaseClass型の変数sample1,2を宣言してその変数にDerivedClass(派生クラス)1,2のインスタンスをUpcastして代入して、それぞれどのMethodが呼び出されるかを確認してみる。

using System;


// 基本クラス
class BaseClass
{
    /* viertualキーワードを使用してoverride
     * できるようにしておく */
    public virtual void printOut()
    {
        Console.WriteLine("BaseClass");
    }
}


// 派生クラス1
class DerivedClass1 : BaseClass
{
    // new演算子を使用して隠蔽
    new public void printOut()
    {
        Console.WriteLine("DerivedClass1");
    }
}


// 派生クラス2
class DerivedClass2 : BaseClass
{
    // override
    public override void printOut()
    {
        Console.WriteLine("DerivedClass2");
    }
}


class MainClass
{
    static void Main()
    {
        // BaseClass型の変数を宣言
        BaseClass sample1,sample2;


        /* sample1,2にDerivedClass1,2のインスタンスを
         * Upcastして代入 */
        sample1 = new DerivedClass1();
        sample2 = new DerivedClass2();


        // 呼び出されるMethodを確認
        sample1.printOut();
        sample2.printOut();
        /* 出力値
         * BaseClass
         * DerivedClass2
         * new演算子を使用した隠蔽だと
         * ポリモーフィズム(多様性)は機能しない */
    }
}

0 コメント:

コメントを投稿