向下类型转换

     由低层次类型转换为高层次类型称为向上类型转换。向上类型转换是自动进行的,比如把int型变量赋给为long型变量,把long型变量赋给double型变量,转换都是自动进行的。由派生类转换为基类也是向上提升,也是自动进行的,但转换后,基类的引用符不能应用派生类对象特有的函数。

     Human  jean = new Human();

     Vervebrata   someone = jean;

     some.Work();

    运行上面语句会出错,虽然someone指向了一个Human类的对象,但是它不能调用Work()函数,因为someone的类型为Vertebrata,而基类Vertebrata中没有申明Work()函数。要想通过基类引用符someone调用派生类特有的函数,必须将someone的类型强制转换为派生类。这种由基类向派生类转换的过程称为向下类型转换。

    //在某处,基类引用符指向了派生类对象

    Human  jean = new  Human();

    Vertebrata   someone  =  jean;

   //在程序的另一个地方

   if (someone   is   Human)

{

       Human people   =    (Human)someone;        //强制转换

       people.Work();

}

    只有由基类向派生类转换时才能强制向下转换,否则程序会抛出异常,所以转换之前我们用is运算符进行检查。

    上面的转换也以通过as运算符实现。

    Human  jean = new Human();

    Vertebrata someone = jean;

    Human  people = someone as Human         //as运算符

    if (people != null)

{

      people.Work();

}

    as运算符用于执行两个引用类型之间的显示转换,它是一种安全的转换,使用前不需要用is运算符测试类型。在类型不兼容的时候,转换的结果是null,而不会抛出异常。

你可能感兴趣的:(类型转换)