• isは返値がbool。比較するオブジェクトに問題なくキャストできる(互換性がある)場合、tureになる。無い場合false
  • asは返値がキャスト値かnull。比較するオブジェクトとキャストの互換性があるならキャスト値を返す。ない場合はnullが入る
  • ダウンキャストしても型は元の型を憶えている(GetType関数等で問い合わせ可能)

   class TestAsIs
   {
       class Animal{ public void Eat() { Console.WriteLine("Eating."); } }
       class Mammal : Animal { public void MammalMethod() { Console.WriteLine("Yes.Mammal."); } }
       class Giraffe : Animal { public void GiraffeMethod() { Console.WriteLine("Yes.Giraffe."); } }

       //ctor
       public TestAsIs()
       {
           Giraffe g = new Giraffe();
           Mammal m = new Mammal();
           UseAsOperator(m);
           UseIsOperator(g);
           Supplement(m);
       }

       private void UseAsOperator(Animal a)
       {
           if (a is Mammal)    //isは返値がbool。オブジェクトaがMammalに問題なくキャストできる(互換性がある)場合tureになる。無い場合false
           {
               Mammal m = (Mammal)a;
               m.MammalMethod();
               Console.WriteLine(m.GetType());
           }
           else
           {
               Console.WriteLine("型がMammalではない");
           }
       }

       private void UseIsOperator(Animal a)
       {
           //asは返値がキャスト値かnull。オブジェクトaがGiraffeと互換性があるならキャスト値を返す。ない場合はnullが入る
           Giraffe g = a as Giraffe;
           if (g != null)
           {
               g.GiraffeMethod();
               Console.WriteLine(g.GetType());
           }
           else
           {
               Console.WriteLine("型がGiraffeではない");
           }
       }

       private void Supplement(Animal a)
       {
           Console.WriteLine(a.GetType());     //aはanimalにダウンキャストされているが元の型を憶えている
       }

       //Yes.Mammal.
       //.TestAsIs+Mammal
       //Yes.Giraffe.
       //.TestAsIs+Giraffe
       //.TestAsIs+Mammal
   }
最終更新:2012年05月30日 15:59