As,Is And Explicit Cast

在使用C#这种语言的时候,有时候实现一个功能有很多的方法。在写代码的时候有时候根本不会仔细考虑该去用哪一种方法,根据自己的习惯去使用其中一种方法。甚至有时根本不用去思考为什么这个方法可以,纯粹根据经验来写程序。这就是C#,门槛比较低,很多基础东西不需要了解照样可以开发软件,做网站。过去我也是这样,但是突然间感觉到:作为一个工程师,应该有严谨的逻辑思维,在选择一件方法去实现某个功能的时候应该需要有强有力的理由证明选择这个方法是对的。如果在做一件事情的时候连为什么要这么做都说不清楚,那又怎么判断自己做的是对的呢?

因此我要时刻提醒自己:在写程序的时候,要经常问自己为什么要这样来写.不要让自己的经验蒙蔽事情的本质。

就我而言,在要对一个对象进行引用转换的时候,我经常会根据自己的心情来选择到底是用强转还是as操作符(也就是说没有任何规律,只知道这两个方法都可以实现转换操作,说不清楚他们有什么区别),而Is操作符几乎不怎么使用。

根据MSDN:

As用来将某个对象转换为另一个兼容类型的引用,如果目标类型与当前对象类型不兼容,则as操作符会返回null作为结果。As只能进行引用类型的转换

而强转操作与As的区别是:

1.强转也能将某个对象转换为另一个兼容类型的引用,但是如果目标类型与当前对象类型不兼容,强转操作会抛出Exception而不是返回null作为结果。

2.强转也可用于值类型之间的转换

因此如果选用As来进行类型转换,需要对转换结果是否为null进行判断。强转则需要对exception进行处理。


Is是用来对一个对象与目标类型是否转换兼容进行检测,兼容则结果是true,否则为false.

Is与可以结合强制转换操作来实现和As一样的功能:

TypeA a = o as Type A

也可以这样来实现:

TypeA a = null;

if(o is TypeA)

{

  a = (TypeA)o;

}

第一种方法只需要进行一次类型兼容检查,而第二种方法需要进行两次类型兼容检查(Is一次,强转一次)



posted @ 2011-07-24 14:32  self.refactoring  阅读(257)  评论(0)    收藏  举报