2010年1月4日月曜日

as演算子を使用して、ダウンキャスト可能な場合はダウンキャスト、不可能な場合はnullを返し、if,else文でそれぞれ出力してみる。

using System;


class BaseClass
{
    public virtual string s()
    {
        return "BaseClass";
    }
}


class DerivedClass1 : BaseClass
{
    public override string s()
    {
        return "DerivedClass1";
    }
}


class DerivedClass2 : BaseClass
{
    public override string s()
    {
        return "DerivedClass2";
    }
}
class MainClass
{
    // アップキャストしたりダウンキャストしたり
    static void Main()
    {
        /* DerivedClass1をBaseClassに
         * アップキャスト */
        BaseClass b1 = new DerivedClass1();
        // b1をDerivedClass1に可能ならばダウンキャスト
        b1 = b1 as DerivedClass1;
        if (b1!=null)
        {
            Console.WriteLine
                ("b1を{0}にダウンキャスト可能",b1.s());
        }
        else
        {
            Console.WriteLine
                ("b1をDerivedClass1にダウンキャストできない");
        }
        // b1をDerivedClass2に可能ならばダウンキャスト
        b1 = b1 as DerivedClass2;
        if (b1!=null)
        {
            Console.WriteLine
                ("b1を{0}にダウンキャスト可能", b1.s());
        }
        else
        {
            Console.WriteLine
                ("b1をDerivedClass2にダウンキャストできない");
        }
    }
}

0 コメント:

コメントを投稿