读书笔记之C#的is和as操作符强制类型转换

原创 2007年09月19日 00:36:00

is操作符检查一个对象是否兼容于指定的类型并返回一个Boolean值:true或false。注意is是不会抛出异常。

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

 上面这段代码中。CLR实际会检查两次对象的类型。is操作符首先核实o是否兼容于Employee类型。如果答案是肯定的,那么在if语句内部执行转型时,CLR再次核实o是否引用一个Employee。CLR的类型检查增强了安全性,但无疑也会对性能造成影响,因为CLR首先必须判断变量o引用的对象的实际类型。然后CLR必须遍历继承层次结构,用每个基类型去核对指定的类型(Employee)

Employee e=as Employee;
if(e!=null)
...{}

上面这段代码中。CLR核实o是否兼容于Employee类型;如果答案是肯定的,as会返回对同一个对象的一个非null引用。如果o不兼容于Employee类型,as操作符会返回null。as操作符造成CLR只校验一次对象的类型。if语句只是检查e是否为null.相较于校验对象的类型,这个检查能更快地执行。

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

Swift入门(十一)——类型转换与is、as操作

三种操作:is、as?和as!Swift是强类型语言,但也允许开发者通过is、as?和as!这三种操作来对类型进行判断和强制转换。其中is用作类型判断,而as?和as!则分别是类型转换的可选形式和强制...
  • abc649395594
  • abc649395594
  • 2015年08月29日 00:45
  • 2430

【c/c++】类型转换函数(类型转换运算符重载函数)

用转换构造函数可以将一个指定类型的数据转换为类的对象。但是不能反过来将一个类的对象转换为一个其他类型的数据(例如将一个Complex类对象转换成double类型数据)。 C++提供类型转换函数(ty...
  • lzm18064126848
  • lzm18064126848
  • 2016年01月04日 18:09
  • 2642

C#的as, is和类型强制转换

C#的as和强制转换
  • DianaCody
  • DianaCody
  • 2014年04月21日 08:14
  • 1282

(读书笔记)C++中的强制类型转换

由于C中的强制类型转换容易出现问题,所以C++在这方面做了改善;尽管还不是至善至美,但使用C++中强制类型转换至少可以减少出错的危险,下面是对C++风格的强制类型转换的一个小结: static_ca...
  • lailaiup168
  • lailaiup168
  • 2011年10月24日 22:47
  • 210

提高C#编程水平的50个要点 1.总是用属性 (Property) 来代替可访问的数据成员 2.在 readonly 和 const 之间,优先使用 readonly 3.在 as 和 强制类型转换之

提高C#编程水平的50个要点 1.总是用属性 (Property) 来代替可访问的数据成员 2.在 readonly 和 const 之间,优先使用 readonly 3.在 as ...
  • u014515784
  • u014515784
  • 2014年04月15日 17:53
  • 513

C++强制类型转换操作符 dynamic_cast

原文 http://www.cnblogs.com/QG-whz/p/4517336.html 主题C++ dynamic_cast是四个强制类型转换操作符中最特殊的一个,它支持运行...
  • u010781856
  • u010781856
  • 2015年08月26日 20:19
  • 253

C++强制类型转换操作符 static_cast

static_cast是一个强制类型转换操作符。强制类型转换,也称为显式转换,C++中强制类型转换操作符有static_cast、dynamic_cast、const_cast、reinterpert...
  • wangkai_123456
  • wangkai_123456
  • 2017年07月13日 15:17
  • 149

C#强制类型转换

  • 2013年04月22日 22:57
  • 13KB
  • 下载

C++入门(16):副本构造器和赋值操作符、强制类型转换

C++入门(16):副本构造器和赋值操作符、强制类型转换副本构造器和赋值操作符 副本构造器形式为:MyClass(const MyClass &rhs); ,没有返回类型。 赋值操作符形式为:My...
  • qq_33256568
  • qq_33256568
  • 2016年01月14日 13:50
  • 276

flex中as强制类型转换

每一种编程语言都提供强制类型转换,允许你将某一种数据类型转换成另一种数据类型,AS3自然也不例外。但是虽然我编写了不少Flex程序,对AS3中的强制类型转换还是不太清楚,以前AS中是这样进行强制类型转...
  • cruelchen
  • cruelchen
  • 2013年07月12日 10:56
  • 544
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:读书笔记之C#的is和as操作符强制类型转换
举报原因:
原因补充:

(最多只允许输入30个字)