2010年1月4日月曜日

あるクラスを型とする変数(今の場合はb1)がダウンキャスト可能かどうかis演算子で診断してから、そのクラスのMethodを呼び出して実行してみる。

using System;


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


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()
    {
        /* DerivedClass1をBaseClassに
         * アップキャスト */
        BaseClass b1 = new DerivedClass1();
        // b1をDerivedClass1に再びダウンキャスト
        if (b1 is DerivedClass1)
        {
            Console.WriteLine
                ("b1をDerivedClass1にダウンキャスト可能");
            b1 = (DerivedClass1)b1;
            b1.printOut();
        }
        else
        {
            Console.WriteLine
                ("b1をDerivedClass1にダウンキャストできない");
        }
        /* 元がDerivedClass1なのでb1を
         * DerivedClassにダウンキャスト可能か
    *is演算子で診断するとFalseになる */
        if (b1 is DerivedClass2)
        {
            b1 = (DerivedClass2)b1;
            b1.printOut();
        }
        else
        {
            Console.WriteLine
                ("b1をDerivedClass2にダウンキャストできない");
        }
    }
}

0 コメント:

コメントを投稿