文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>由最近值类型和引用类型探讨想到的一些问题

由最近值类型和引用类型探讨想到的一些问题

时间:2010-12-13  来源:xiangyun

1.会因为没有记住使用的类型而出错,造成类型不兼容;
2.值类型和引用类型的相互转换即装箱拆箱使系统性能下降。

三、在.Net中如何利用is as进行类型转换   1、直接强制转换。例如Employee e = (Employee)o;但是这么转换如果o不是Employee类型则会抛出异常。   2、第二种是使用 as 或则 is 操作符进行转换。在《CLR via C# 》中有如下描述。   is检查一个对象是否兼容于指定的类型。并返回一个Boolean值:true or false。并且is操作符永远不会抛出异常,如果对象引用为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引用。如果不兼容,as则会返回Null值。由于as操作符造成CLR只校验一次对象的类型。if语句只检查e是否为null.这个检查速度比校验类型快的多。as操作符的工作方式与强制类型转换一样,只是它永远不会抛出异常。

但是as 不能用于值类型而is却可以。例如如下代码将无法编译 object o = Factory.GetValue( );
int i = o as int;
  关于as 和 is 在《你必须知道的.NET] 第一回:恩怨情仇:is和as 》中的介绍也很不错大家可以参考。
相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载