在程序中,进行类型转换时常见的事,c#支持基本的强制类型转换方法,例如
object obj1 = new newtype();
newtype newvalue = newtype)obj1;
这样强制转换的时候,这个过程是不安全的,因此需要用try-catch语句进行保护,这样一来,比较安全的**方式应如下所示:
object obj1 = new newtype();
newtype newvalue = null;
trynewvalue = newtype)obj1;
catch (exception err)
但是上面的写法在c#中已是过时的写法,也是比较低效的写法,比较高效且时尚的写法是用as操作符,如下:
object obj1 = new newtype();
newtype newvalue = obj1 as newtype;
安全性:as操作符不会做过的转换操作,当需要转化对象的类型属于转换目标类型或者转换目标类型的派生类型时,那么此转换操作才能成功,而且并不产生新的对象【当不成功的时候,会返回null】。因此用as进行类型转换是安全的。
效率:当用as操作符进行类型转换的时候,首先判断当前对象的类型,当类型满足要求后才进行转换,而传统的类型转换方式,是用当前对象直接去转换,而且为了保护转换成功,要加上try-catch,所以,相对来说,as效率高点。
需要注意的是,不管是传统的还是as操作符进行类型转换之后,在使用之前,需要进行判断转换是否成功,如下:
if(newvalue !=null)
/work with the object named “newvalue“
但是,使用as操作符要注意以下几点:
1、不用在类型之间进行类型转化,即如下编写就会出现编译错误。
newtype newvalue = new newtype();
newtype1 newvalue = newvalue as newtype1;
2、不能应用在值类型数据,即不能如下写(也会出现编译错误)
object obj1 = 11;
int nvalue = obj1 as int;
对于1.,可以用传统的类型转换方式完成:
newtypeone newtestone = new newtypeone();
newtypetwo newtesttwo = newtypetwo)newtestone;
要想使上面的操作正确完成,在原有类型中增加类型转换操作符函数,即需要完成类似如下的**:
public calss newtypeone
public static explicit operator newtypetwo( newtypeone obj1)
/convert object into new type
对于2,在c#中可以使用is操作符,再加上老式的类型转换操作,就可以安全完成转换,要完成如上操作,正确的写法如下:
object obj1 = 11;
if(objtest is int )
int nvalue = int)obj1;
在c#中提供的很好的类型转换方式总结为:
object =>已知引用类型——使用as操作符完成;
object =>已知值类型——先使用is操作符来进行判断,再用类型强转换方式进行转换;
已知引用类型之间转换——首先需要相应类型提供转换函数,再用类型强转换方式进行转换;
已知值类型之间转换——最好使用系统提供的conver类所涉及的静态方法。
seem的用法总结
蠢智擘 皇 里做作业。他好象感。冒了。法总结。后接介词短语。五分钟仿佛就像一小时那样长。那位老李。璐。在英语中,是不及物动词,意思是 似。乎 好象 看起来像 用法较多。现将其主要用法和句型总结如下 后接形容词。他好象很快活,无忧无虑似的。这个苹果看上去很好,但里面烂了。在。你看来容易的事对我却似乎很...
文稿中数字用法的要求及数的修约规则
解放军护理杂志。喉痉挛可致窒息。遇此情况,应力求迅速将支气管镜插入声儿的变化,尤其是呼吸频率 深度和节律的变化及口唇颜色,观。门,窒息即可解除。婴幼儿在行支气管镜检查术后,有可能。察有无咯血及是否有发热 气胸 喉痉挛等并发症的发生。发生呼吸困难甚至窒息,与咽喉部受刺激后水肿有关。为。常规护理。术后禁...
C语言知识点总结
备注,这不是我们学校老师做的总结,所以里面有些地方说那个知识点是重点的不要完全相信,因为每个学校的侧重点不同,而且有些我们是没有学过的。希望这份东西对大家有用。明天就要考试了,看试题已经没有多大作用了,因为试题是看不完的,而且只要你巩固了基础,那出什么试题都不怕。6 算术运算符号的优先级别 同级别的...