码迷,mamicode.com
首页 > Web开发 > 详细

NET基础(3):is 和 as 操作符

时间:2016-05-28 17:09:08      阅读:150      评论:0      收藏:0      [点我收藏+]

标签:

  在C#语言中进行类型转换的另外一种方式是使用is和as操作符。is检查对象是否兼容于指定类型,返回Boolean值true或false。注意,is操作符永远不抛出异常,例如以下代码:

Object o = new Object();

Boolean b1 = (o is Object);    //返回true
Boolean b2 = (o is Employee);    //返回false

  如果对象引用null,is操作符总是返回false,因为没有可以检查其类型的对象。

is操作符通常像下面这样使用:

if(o is Employee)
{
    Employee e = (Employee)o;
}

  在上述代码中,CLR实际检查两次对象类型。is操作符首先核实o是否兼容于Employee类型,如果是,在if语句块内进行类型转换,CLR再次核实o是否引用一个Employee。CLR的类型检测增加了安全性,但无疑会对性能造成一些损失。这是因为CLR首先必须判断变量o引用的对象的实际类型。然后,CLR必须遍历继承层次结构,用每个基类型去核对指定的类型(Employee)。由于这是一个相当常用的编程模式,所以c#专门提供了as操作符,目的就是简化这种代码的写法,同时提升其性能。

Employee e = o as Employee;
if(e != null)
{
     //在if中使用e
}

  在这段代码中,CLR核实o是否兼容于Employee类型;如果是,as返回对同一个对象的非null引用。如果o不兼容与Employee类型,as 返回null。注意,as操作符造成CLR只检验一次对象类型。if语句只检测e是否为null;这个检查速度比检验对象的类型要快的多。

     as 操作符的工作方式与强制类型转换一样,只是它永远不会抛出异常,如果对象不能转型,结果就是null。所以,正确做法是检查最终生成的引用是否为null。

NET基础(3):is 和 as 操作符

标签:

原文地址:http://www.cnblogs.com/sunyj/p/5537608.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!