FC2ブログ
    04 «1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.» 06

    ハルシオンシステムの気ままBlog

    株式会社ハルシオンシステムのメンバーが送る、UnityやらJavaやらの技術的話題から、自社開発のアプリの宣伝とかとかのブログです。ほんと気ままにいきたいと思います。更新日は毎週 月 木でっす!

     

    【ハルシオンブログ】型のキャストができるかできなかの判別するとき 

    こんにちは。
    大坂です。

    今日もC#なお話。

    型のキャストができるかできなかの判別したいときがたまにあります。
    そんなときは「typeof」や「is演算子」を使用すると思いますが、
    適当にやって結果が違ってあれ?と思った事があったので違いについてのメモ。

    こんなクラスがあったとき。
    public class TestBase { }
    public class Test_1 : TestBase { }
    public class Test_2 : Test_1 { }
    public class Test_3 : Test_2 { }

    こんな感じで見てみます。
    TestBase test = new Test_2();

    bool isTypeofTestBase = typeof(TestBase) == test.GetType();
    bool isTypeofTest_1 = typeof(Test_1) == test.GetType();
    bool isTypeofTest_2 = typeof(Test_2) == test.GetType();
    bool isTypeofTest_3 = typeof(Test_3) == test.GetType();
    Debug.Log("isTypeOfTestBase:" + isTypeOfTestBase);
    Debug.Log("isTypeOfTest_1:" + isTypeOfTest_1);
    Debug.Log("isTypeOfTest_2:" + isTypeOfTest_2);
    Debug.Log("isTypeOfTest_3:" + isTypeOfTest_3);

    bool isTestBase = test is TestBase;
    bool isTest_1 = test is Test_1;
    bool isTest_2 = test is Test_2;
    bool isTest_3 = test is Test_3;

    Debug.Log("isTestBase:" + isTestBase);
    Debug.Log("isTest_1:" + isTest_1);
    Debug.Log("isTest_2:" + isTest_2);
    Debug.Log("isTest_3:" + isTest_3);

    結果。


    「typeof」の方は指定したクラスで判別して、
    「is演算子」の方は基底クラスで判別するという違いがあるみたいですね!

    では今週もこれにてノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0   

    コメント

    コメントの投稿

    Secret

    トラックバック

    トラックバックURL
    →http://halcyonsystemblog.jp/tb.php/626-36c1c358
    この記事にトラックバックする(FC2ブログユーザー)