C#类型转换
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C#类型转换,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2514字,纯文字阅读大概需要4分钟。
内容图文
![C#类型转换](/upload/InfoBanner/zyjiaocheng/1169/831530382dca4173883c63496d27221c.jpg)
一、类型转换
先介绍两个前置知识:
一是C#代码会经过编译期和运行期两个状态,前者表示代码是否通过语法检验,后者表示代码在用户使用过程中。
二是C#的所有类型都是从System.Object派生的(其中Object类等于object关键字)。
在继承关系中,使用基类代替派生类作为字段/属性类型、参数类型或返回值类型比使用派生类本身要好用得多。代码如下:
1 /// <summary> 2 /// 会员 3 /// </summary> 4 public abstract class Member //隐式继承于object 5{ 6///<summary> 7/// 积分 8///</summary> 9protectedint score; 10///<summary>11/// 添加积分 12///</summary>13///<param name="num"></param>14publicabstractvoid AddIntegral(int num); 15} 16///<summary>17/// 青铜会员 18///</summary>19publicclass BronzeMember : Member 20{ 21publicoverridevoid AddIntegral(int num) 22 { 23 score = score + num; 24 } 25} 26///<summary>27/// 白银会员 28///</summary>29publicclass SilverMember : Member 30{ 31publicoverridevoid AddIntegral(int num) 32 { 33 score = score + num * 2; 34 } 35} 36///<summary>37/// 游戏 38///</summary>39publicclass Game //隐式继承于object40{ 41//使用基类Member作为参数类型,可以使该参数更具通用性,因为继承的转换规则允许基类引用中保存派生类的实例,即参数generalMember可以是Member类下的所有派生类42publicstaticvoid PlayGame(Member generalMember) 43 { 44//进行游戏 45//游戏结束后添加积分46 generalMember.AddIntegral(2); 47 } 48} 49///<summary>50/// 实现 51///</summary>52publicclass RealizeObject //隐式继承于object53{ 54publicvoid Realize() 55 { 56//C#允许派生类直接向基类转换,即隐式转换57 Member bronze = new BronzeMember(); 58 Game.PlayGame(bronze); 59//因为SilverMember派生于Member,Member派生于object,所以object可以保存SilverMember的实例60object silver = new SilverMember(); 61//基类object直接向派生类Member转换会发生编译时错误(即语法验证不通过),此时如果使用对应类型的强制转换符则编译可通过62 Game.PlayGame((SilverMember)silver); 63 } 64 }
如果silver对象的实现类型与强制转换的类型非继承关系,则在运行时会出现异常。此时处理方式除了使用结构化异常处理外,C#还提供了更加简洁和快速的方式as和is关键字。
二、as和is关键字
1 public class GoldMember 2 { 3 4 } 5 public class RealizeObject 6 { 7 public void Realize() 8 { 9 object goldMember = new GoldMember(); 10//is关键字检验is左边的对象是否与右边兼容,兼容则返回true,不兼容则返回false11if (goldMember is Member) 12 { 13 Game.PlayGame((Member)goldMember); 14 } 15//as关键字检验as左边的对象是否与右边兼容,兼容则把对象转换成as右边的类型并返回,不兼容则返回NULL16 Member gold = goldMember as Member; 17if (goldMember != null) 18 { 19 Game.PlayGame(gold); 20 } 21 } 22 }
is关键字与as关键字的相同点:1、它们都为类型转换时作检查;2、它们永远不会抛出异常。
is关键字与as关键字的不同点:1、检查返回结果不一样;2、前者需要进行两次类型检查,后者需要进行一次和判断一次,性能优于前者。
is关键字适用于判断对象是否兼容某个类型,重点在判断。
as关键字适用于检查对象并转换为某个类型,重点在转换。
总结:类型转换在继承关系中,C#允许派生类直接向基类转换(隐式转换),反之如果基类直接向派生类转换会发生编译时错误(即语法验证不通过),此时如果使用对应类型的强制转换符则编译可通过(显示转换)。但如果此对象的实现类型与强制转换的类型非继承关系,则在运行时会出现异常,此时处理方式除了使用结构化异常处理外,C#还提供了更加简洁和快速的方式as和is关键字(as适于转换,is适于判断)。
原文:https://www.cnblogs.com/yaojieyuan/p/11614505.html
内容总结
以上是互联网集市为您收集整理的C#类型转换全部内容,希望文章能够帮你解决C#类型转换所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。