黑马程序员技术交流社区

标题: 关于类型转换的问题 [打印本页]

作者: 鲍云龙    时间: 2012-6-22 08:04
标题: 关于类型转换的问题
强制类型转换 与 用as进行转换的区别是什么?
作者: 张恒维    时间: 2012-6-22 09:07
1、as 运算符类似于类型转换,所不同的是,当转换失败时,as运算符将产生空,而不是引发异常。在形式上,这种形式的表达式:expression as type
2、as运算符只执行引用转换和装箱转换。
3、as运算符无法执行其他转换,如用户定义的转换,这类转换应使用case表达式来代替其执行。
关于is的其实也差不多,只是is不会帮你进行任何的转换。所以需要自已进行显示转换。is操作符进行转换,它自动检查时局是否和类型兼容,并返回结果。而且它不会抛出异常。如果对象引用为null,则is总返回false。
我觉得用as转换比强制类型要好些,至少不会报异常。
作者: 刘逍遥    时间: 2012-6-22 15:08
本帖最后由 刘逍遥 于 2012-6-22 15:10 编辑

类型转换时编程中很常见的操作:
     经常出现类型转换不成功,并且会抛出异常
1  is运算符:
        定义使用格式: 表达式   is  目标类型
               适用范围:
                     1  引用转换   ----------------引用类型之间转换
                      2  装箱转换 ----------------- 值类型到引用类型之间转换
                        3  拆箱转换 -------------------引用类型到值类型之间转换
          举例:一下代码用is运算法来检测Bob类型是否能转换成Person类
               class Person           //定义Person类
              {
                   public string name="乖蛋";
               }
             class  Bob:Person{}  //Bob继承自Person类
            
              //主程序  【引用类型之间转换
             class Program
            {
                 static void Main()
                 {
                        Bob b=new Bob();   //实例化Bob
                        Person  p;                //声明Person引用
                       if( b  is  p)                 //尝试转换            此处可以看到is运算符在类型转换,如果成功则为true,否则为false
                      {
                             p=b;                 //如果成功则p=b
                             Console.WriteLine("p 中的name是:{0}", p.name)
                     }
                 }
           }
2 as  运算符
    定义格式: 表达式  as  目标类型
    使用范围:
                     1  引用转换   ----------------引用类型之间转换
                      2  装箱转换 ----------------- 值类型到引用类型之间转换
        举例:
             class Person           //定义Person类
              {
                   public string name="乖蛋";
               }
             class  Bob:Person{}  //Bob继承自Person类
            
              //主程序  【as转换】
             class Program
            {
                 static void Main()
                 {
                        Bob b=new Bob();   //实例化Bob
                        Person  p;                //声明Person引用
                       p =b  as   Person     //定义的格式
                       if( p!=null )                 //尝试转换            此处可以看到as运算符在类型转换,如果成功则为源类型引用,否则为null
                      {
                             Console.WriteLine("p 中的name是:{0}", p.name)
                     }
                 }
           }

希望对你有用!
     






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2