读书笔记之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异常。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

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

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

C#强制类型转换

  • 2013-04-22 22:57
  • 13KB
  • 下载

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

static_cast是一个强制类型转换操作符。强制类型转换,也称为显式转换,C++中强制类型转换操作符有static_cast、dynamic_cast、const_cast、reinterpert...

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

C++入门(16):副本构造器和赋值操作符、强制类型转换副本构造器和赋值操作符 副本构造器形式为:MyClass(const MyClass &rhs); ,没有返回类型。 赋值操作符形式为:My...

Effective C#阅读笔记-3使用is或者as代替cast做类型转换

C#是强类型语言,好的编程习惯应该尽量避免类型的转换。但是很多时候我们很难避免需要将一个类型强制转换为另外一个类型,例如很多函数都是以Object对象作为参数的,这个时候就需要类型的向下转换。1.使用...

C#2.0泛型编程之强制类型转换、继承和泛型

泛型和强制类型转换     隐式强制转换         C#编译器只允许将泛型参数隐式强制转换到object或泛型参数的约束指定的类型,代码如下 interface IMyInterface ...

android开发笔记之通过辅助类解决findViewById需要对返回值强制类型转换的问题

1.android中findViewById需要对返回值强制类型转换的问题描述      findViewById的返回值是view类型,通常开发中,我们需要将其强制转换成实际类型,输入麻烦、代码丑陋...

自动、强制类型转换 | 变量作用域 | java初学笔记 新手理解

一 、自动类型转换(隐式转换) 自动类型转换时不需要程序员去手动进行的,但是需要满足两个条件才会进行。 1、两种数据类型彼此兼容 2、目标类型取值范围大于源类型的取值范围 列出三种自动类型转换...

初探C++强制类型转换学习笔记

强制类型转换   static_cast、interpret_cast、const_cast和dynamic_cast
  • wxwd1
  • wxwd1
  • 2014-07-07 13:42
  • 591
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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