在学习了AnyTao的你必须知道的.NET文章后记录下学习心得。

     这篇文章是学习了[你必须知道的.NET] 第一回:恩怨情仇:is和as 与 Effective c# Item3:选择is或者as操作符而不是做强制类型转换 后写下来的     

     

     在.net中类型转换有显示,隐式2种方法,他们规则如下

    1. 任何类型都可以安全的转换为其基类类型,可以由隐式转换来完成。 如int i=5; object o = i;
    2. 任何类型转换为其派生类型时,必须进行显示转换,转换的规则是:(类型名)对象名。如:object o = new object(); int i=(int)o;
    3. 使用GetType可以取得任何对象的精确类型。
    4. 基本类型可以使用Covert类实现类型转换。
    5. 除了string以外的其他类型都有Parse方法,用于将字符串类型转换为对应的基本类型。
    6. 值类型和引用类型的转换机制称为装箱(boxing)和拆箱(unboxing)。           

          下面是几个关于类型转换的实例:

清单1

 

          这是最直接的操作方法了,但在这里直接用强类型转换有几个问题:

          1.o在转换前为null。

          2.(A)o为null。(就是说o不是A类型)

          上面这2个都会引起程序抛出异常,所以说强类型转换是不安全的。为了避免出现这种情况可以由以下几种方法来代替上面的方法:

 

清单2

          

          第一种用了try catch来捕获程序可能存在的错误,但是这增加了性能的开销,通常我个人推荐能不用try catch就尽量不用。

 

          第二种先用Is 运算符来判断o类型再进行强转换,这个过程o进行了2次类型兼容检查一次在o is A 里检查,另一次在a=(A)o里检查。性能上也不是很好。

 

          第三种用了as运算符来进行类型转换,as运算符在这里是这样工作的,先是把o转换为A类型,若o是Null或者类型不一直转换失败那么a为null,它不会抛出异常,就如前面说的如果转换失败了,那么a为null所以在这里要使用a之前需要一个判断

          

清单3

          

          这个是完整的类型转换代码。 

 

          未完待续。。。