C#中is与as的区别分析


本文实例分析了C#中is与as的区别,分享给大家供大家参考。具体分析如下:

一、C#类型的转换

在c#中类型的转换分两种:显式和隐式,基本的规则如下:

1、基类对象转化为子类对象,必须显式转换,规则:(类型名) 对象。
2、值类型和引用类型的转换采用装箱(boxing)或拆箱(unboxing).
3、子类转化为基类对象。
4、基本类型互相之间转化可以用Covent类来实现。
5、字符串类型转换为对应的基本类型用Parse方法,除了String类型外其他的类型都可以用Parse方法。
6、用GetType可以取得对象的精确类型。
7、子类转化为基类,采用隐式转换。

二、C#中的is

检查一个对象是否兼容于其他指定的类型,并返回一个Bool值,如果一个对象是某个类型或是其父类型的话就返回为true,否则的话就会返回为false。永远不会抛出异常
如果对象引用为null,那么is操作符总是返回为false,因为没有对象可以检查其类型。

例如

复制代码 代码如下:
object o = new object();
if (o is Label)
{
    Label lb = (Label)o;
    Response.Write("类型转换成功");
}
else
{
    Response.Write("类型转换失败");  
}

三、C#中as的转换规则

1、检查对象类型的兼容性,并返回转换结果,如果不兼容则返回null;
2、不会抛出异常;
3、如果结果判断为空,则强制执行类型转换将抛出NullReferenceException异常;
4、用as来进行类型转换的时候,所要转换的对象类型必须是目标类型或者转换目标类型的派生类型

例如

复制代码 代码如下:
object o = new object();   
Label lb = o as Label;   
if (lb == null)
{
    Response.Write("类型转换失败");
}
else
{     
    Response.Write("类型转换成功");
}

使用as操作符有如下几点限制

第一个就是,不用在类型之间进行类型转化,即如下编写就会出现编译错误。

复制代码 代码如下:
NewType newValue = new NewType();
NewType1 newValue = newValue as NewType1;

第二个就是,不能应用在值类型数据,即不能如下写(也会出现编译错误)。

复制代码 代码如下:
object objTest = 11;
int nValue = objTest as int;

四、as与is的区别

1、AS在转换的同事兼判断兼容性,如果无法进行转换,则 as 返回 null(没有产生新的对象)而不是引发异常。有了AS我想以后就不要再用try-catch来做类型转换的判断了。因此as转换成功要判断是否为null。

2、AS是引用类型类型的转换或者装箱转换,不能用与值类型的转换。如果是值类型只能结合is来强制转换
3、IS只是做类型兼容判断,并不执行真正的类型转换。返回true或false,不会返回null,对象为null也会返回false。

4、AS模式的效率要比IS模式的高,因为借助IS进行类型转换的化,需要执行两次类型兼容检查。而AS只需要做一次类型兼容,一次null检查,null检查要比类型兼容检查快。

五、在进行类型转换的时候,可以按照如下的方式进行选择

1、Object => 已知引用类型
使用as操作符来完成

2、Object => 已知值类型
先使用is操作符来进行判断,再用类型强转方式进行转换

3、已知引用类型之间转换
首先需要相应类型提供转换函数,再用类型强转方式进行转换

4、已知值类型之间转换
最好使用系统提供的Convert类所涉及的静态方法

六、(int)和Int32.Parse(),Convert.ToInt32()三者的区别

1、(int)转换:用在数值范围大的类型转换成数值范围小的类型时使用,但是如果被转换的数值大于或者小于数值范围,则得到一个错误的结果,利用这种转换方式不能将string转换成int,会报错。

2、Int32.Parse()转换:在符合数字格式的string到int类型转换过程中使用,并可以对错误的string数字格式的抛出相应的异常。

3、Convert.ToInt32()转换:使用这种转换,所提供的字符串必须是数值的有效表达方式,该数还必须不是溢出的数。否则抛出异常。

希望本文所述对大家的C#程序设计有所帮助。



相关阅读:
PHP设计模式之简单投诉页面实例
C#实现自定义FTP操作封装类实例
Win10下DX12实测:老卡老U能力翻3倍
Jquery插件easyUi表单验证提交(示例代码)
详解Linux中用于查询用户信息的finger和chfn命令
AngularJs学习第八篇 过滤器filter创建
html制作细线表格的简单实例
Jquery实现自定义tooltip示例代码
CSS3制作酷炫的三维相册效果
javascript中indexOf技术详解
js实现ArrayList功能附实例代码
C标准库<assert.h>的实现详解
jQuery中ajax - get() 方法实例详解
Win8.1系统在安全模式下杀毒教程
快速导航
PHP MySQL HTML CSS JavaScript MSSQL AJAX .NET JSP Linux Mac ASP 服务器 SQL jQuery C# C++ java Android IOS oracle MongoDB SQLite wamp 交通频道 作文范文 爷爷和奶奶的爱情 “要被冻成狗了” 市县春节团拜会主持词 《遇见温暖》原创 晨作文100字 2015年化妆品店长年终总结工作计刬 那一次,我受到过了老师的很多次表扬作文700字 五好党支部创建活动实施方案 学会感恩主题班会演讲稿 感恩父母——诗歌朗诵作文700字 一个人习惯一个人 关于跑步的励志格言,送给每天晨跑的你! 2015年国培计划心得体会(中学) 突然想起同桌的你作文100字 美丽的杭州植物园 【月光爱人】 味道好极了550字作文 2014上半年设计师工作总结范文 志愿者精神演讲稿 最初的美好在那淡淡的岁月里渐行渐远 不愿告别,却总在告别 2050年的世界作文900字 2016开办“生态农业与旅游”专业的可行性分析报告 我最喜欢的一种动物作文500字 复兴中华,拯救华夏 初中英语文章长篇50篇 七年级语文教学工作总结【精品】 成长阶梯作文300字 安全生产月活动总结范文汇总 隐形的残忍作文 增强共青团员意识主题教育心得体会 携半卷愁怨,我打江南走过 最优秀的老师,是生存 咏史诗。章华台 长街灯灭 曲终人散 家访手记范文 促进科技服务业发展方法与措施 安静的日子 雨丝.落日,遐想,回忆,殇 冬的精灵作文800字 逗比搞笑日志:我爱学习学习让我快乐 学院2013学年度第一学期工作计划 中国新生代女演员周冬雨经典语录 中秋节祝福语说说 我的朋友王浩然作文150字 Xx镇xx村生态移民建设工作总结 人生如书,每个人都是自己的作者 关于端午节作文600字:端午节 妈妈的眼睛作文250字 没人扶你的时候,自己站直!

Copyright © 2016 phpStudy |