2009年12月22日火曜日

is演算子を使用しクラス型の変数が指定したクラス型にダウンキャスト可能かどうか診断してから実行してみる。

using System;


class BaseClass
{
    public virtual void baseInfo()
    {
        Console.WriteLine("基本クラス");
    }
}


class DerivedClass1 : BaseClass
{
    // オーバーライド
    public override void baseInfo()
    {
        Console.WriteLine("派生クラス1");
    }
}


class DerivedClass2:BaseClass
{
    // 隠蔽
    new public void baseInfo()
    {
        Console.WriteLine("派生クラス2");
    }
}


class MainClass
{
    static void Main()
    {
        /* DerivedClass1のインスタンスを
         * BaseClass型の変数に代入(アップキャスト)*/ 
        BaseClass bc = new DerivedClass1();
        string s="ダウンキャストできない";
        if ((bc is DerivedClass1) == true)
        {
            DerivedClass1 dc1 = (DerivedClass1)bc;
            dc1.baseInfo();
        }
        else
        {
            Console.WriteLine(s);
        }
        if ((bc is DerivedClass2) == true)
        {
            DerivedClass2 dc2 = (DerivedClass2)bc;
        }
        else
        {
            Console.WriteLine(s);
        }
    }
}

0 コメント:

コメントを投稿