2010年2月15日月曜日

virtual keywordを付けてoverrideできるようにしたMethodをもつBase Classを定義してそのClassを継承したDerived Classを2つ定義し、それぞれBase ClassのMethodをoverride、隠蔽してMethodを書き換え、Base Class型の変数を宣言してそれぞれのDerived ClassのインスタンスをUpcastしてBase Class型の変数に代入し、ポリモーフィズム(多様性)がどのように機能し、どのClassのMethodが呼び出されるかを確認してみる。

using System;

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

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

// 隠蔽
class DerivedClass2 : BaseClass
{
    new public void printOut()
    {
        Console.WriteLine("DerivedClass2");
    }
}

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

        // インスタンスを代入
        sample = new BaseClass();
        sample.printOut();

        /* DerivedClass1のインスタンスを
         * Upcastして代入 */
        sample = new DerivedClass1();
        // 出力値:DerivedClass1
        sample.printOut();

        /* DerivedClass2のインスタンスを
         * Upcastして代入 */
        sample = new DerivedClass2();
        // 出力値:BaseClass
        sample.printOut();
        // 隠蔽ではポリモーフィズム(多様性)は機能しない
    }
}

0 コメント:

コメントを投稿