コード書けばすぐわかる事なんですが is 演算子の挙動の話です。
is 演算子は複数の型で true になる可能性があります。
親子関係がある型で厳密に型を判定したい場合、GetType() と typeof を使います。
// こんなクラスがあったとして、、 public class BaseClass { } public class DerivedClass_1 : BaseClass { } public class DerivedClass_2 : BaseClass { } // こんなコードを書いたとすると結果がコメントのようになります static void Main(string[] args) { BaseClass test = new DerivedClass_1(); // is演算子による型判定 Console.WriteLine("test is BaseClass? = " + (test is BaseClass)); Console.WriteLine("test is DerivedClass_1? = " + (test is DerivedClass_1)); Console.WriteLine("test is DerivedClass_2? = " + (test is DerivedClass_2) + "\r\n"); // test is BaseClass? = True ★親クラスも一 tureになる(互換性ありと判断できる // test is DerivedClass_1? = True // test is DerivedClass_2? = False // typeofによる型判定 Console.WriteLine("test typeof BaseClass? = " + (test.GetType() == typeof(BaseClass))); Console.WriteLine("test typeof DerivedClass_1? = " + (test.GetType() == typeof(DerivedClass_1))); Console.WriteLine("test typeof DerivedClass_2? = " + (test.GetType() == typeof(DerivedClass_2))); // test typeof BaseClass? = False ★親クラスは一致しない (厳密に同じ型かどうか調べる // test typeof DerivedClass_1? = True // test typeof DerivedClass_2? = False }
★の部分で違いがあります。
is演算子はアップキャストできる型の場合trueと覚えておくとよいでしょう。