志在指尖
用双手敲打未来

C#类型转换

一、类型转化
先介绍两个前置知识:
一是C#代码会经过编译期和运转期两个状况,前者表明代码是否通过语法检验,后者表明代码在用户运用过程中。
二是C#的一切类型都是从System.Object派生的(其间Object类等于object关键字)。
在承继联系中,运用基类代替派生类作为字段/属性类型、参数类型或回来值类型比运用派生类自身要好用得多。代码如下:
1///2///会员3///4publicabstractclassMember//隐式承继于object5{6///7///积分8///9protectedintscore;10///11///增加积分12///13///14publicabstractvoidAddIntegral(intnum);15}16///17///青铜会员18///19publicclassBronzeMember:Member20{21publicoverridevoidAddIntegral(intnum)22{23score=score+num;24}25}26///27///白银会员28///29publicclassSilverMember:Member30{31publicoverridevoidAddIntegral(intnum)32{33score=score+num*2;34}35}36///37///游戏38///39publicclassGame//隐式承继于object40{41//运用基类Member作为参数类型,能够使该参数更具通用性,由于承继的转化规则答应基类引用中保存派生类的实例,即参数generalMember可所以Member类下的一切派生类42publicstaticvoidPlayGame(MembergeneralMember)43{44//进行游戏45//游戏完毕后增加积分46generalMember.AddIntegral(2);47}48}49///50///完成51///52publicclassRealizeObject//隐式承继于object53{54publicvoidRealize()55{56//C#答应派生类直接向基类转化,即隐式转化57Memberbronze=newBronzeMember();58Game.PlayGame(bronze);59//由于SilverMember派生于Member,Member派生于object,所以object能够保存SilverMember的实例60objectsilver=newSilverMember();61//基类object直接向派生类Member转化会发生编译时错误(即语法验证不通过),此刻假如运用对应类型的强制转化符则编译可通过62Game.PlayGame((SilverMember)silver);63}64}
假如silver目标的完成类型与强制转化的类型非承继联系,则在运转时会出现反常。此刻处理方法除了运用结构化反常处理外,C#还供给了愈加简练和快速的方法as和is关键字。

C#
二、as和is关键字
仿制代码
1publicclassGoldMember2{34}5publicclassRealizeObject6{7publicvoidRealize()8{9objectgoldMember=newGoldMember();10//is关键字检验is左面的目标是否与右边兼容,兼容则回来true,不兼容则回来false11if(goldMemberisMember)12{13Game.PlayGame((Member)goldMember);14}15//as关键字检验as左面的目标是否与右边兼容,兼容则把目标转化成as右边的类型并回来,不兼容则回来NULL16Membergold=goldMemberasMember;17if(goldMember!=null)18{19Game.PlayGame(gold);20}21}22}
仿制代码
is关键字与as关键字的相同点:1、它们都为类型转化时作查看;2、它们永久不会抛出反常。
is关键字与as关键字的不同点:1、查看回来结果不一样;2、前者需求进行两次类型查看,后者需求进行一次和判别一次,功能优于前者。
is关键字适用于判别目标是否兼容某个类型,重点在判别。
as关键字适用于查看目标并转化为某个类型,重点在转化。
总结:类型转化在承继联系中,C#答应派生类直接向基类转化(隐式转化),反之假如基类直接向派生类转化会发生编译时错误(即语法验证不通过),此刻假如运用对应类型的强制转化符则编译可通过(显示转化)。但假如此目标的完成类型与强制转化的类型非承继联系,则在运转时会出现反常,此刻处理方法除了运用结构化反常处理外,C#还供给了愈加简练和快速的方法as和is关键字(as适于转化,is适于判别)。

未经允许不得转载:IT技术网站 » C#类型转换
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

志在指尖 用双手敲打未来

登录/注册IT技术大全

热门IT技术

C#基础入门   SQL server数据库   系统SEO学习教程   WordPress小技巧   WordPress插件   脚本与源码下载