C#中的is和as操作符
来源:互联网 发布:linux 调整根目录大小 编辑:程序博客网 时间:2024/05/22 17:27
在C#语言中进行类型转换的操作符is和as。is和as都是强制类型转换,但这两者有什么相同之处和不同之处呢?在使用is和as需要注意哪些事项?下面我们从简单的代码示例去探讨这个简单的问题。注:此博文只是本人学习过程中一些简要记录,新手可以看一下,高手略过。
is检查一个对象是否兼容于指定的类型,并返回一个Boolean值:true或者fasle。注意,is操作符永远不会抛出异常,请看以下示例:
ClassA
{
....
}
Object o=new Object();
Boolean b1=(o is Object); //b1为true.
Boolean b2=(o is ClassA) ; b2为false.
如果对象引用是null,is操作符总是返回false,因为没有可检查的其类型的对象。
is 操作符通常像下面这样使用:
if(obj is ClassA)
{
ClassA a=(ClassA) obj;
...
}
在这一段代码中,CLR实际会检查两次对象类型。is操作符首先核实obj是否兼容于ClassA 类型。如果是,那么在if语句内部执行类型转换时,CLR再次核实obj是否引用一个ClassA。CLR的类型检查增强了安全性,但也会对性能造成一定的影响。这是因为CLR首先必须判断(obj)引用的对象的实际类型。然后CLR必须遍历继承层次结构,用每个基类型去核对指定的类型(ClassA)。
实际系统开发中,这是一个相当常用的编程模式,于是C#有了操作符as。
但as有其不同的地方,简化代码,同时提升性能。
请看示例代码:
Object obj=new Object();
ClassA a= obj as ClassA;
if(a!=null) //在if判断a是否为null
{
...
}
在这一段代码中,CLR核实obj是否兼容于ClassA类型,如果是,as会返回对同一个对象的一个非null引用;
如果obj不兼容ClassA类型,as操作符会返回null。
因此,as操作符使CLR只检验一次对象的类型。
if语句只是检查a是否为null。这个检查的速度比检验对象的类型快得多。
所以正确做法是检查最终生成的引用是否为null。如果企图直接使用最终生成null的引用,会抛出一个 NullReferenceException异常。
示例代码:
Object obj=new Object(); //创建一个object对象.
ClassA a =obj as ClassA;//将obj转型为ClassA,此时转型操作会失败,不会抛出异常,但a会被设为null.
a.ToString();//访问a会抛出一个NullReferenceException异常。
转载请保留原文地址:
- C# 中的IS和AS操作符
- C#中的is和as操作符
- C#中的is和as操作符
- C#中的is和as操作符
- C#中的is和as操作符
- C#中的is和as操作符
- C#中的is和as操作符
- C#中的is和as操作符
- C#中的is和as操作符
- C#中的is和as操作符
- C#中的is和as操作符
- C#中的is和as操作符区别
- C#中is和as操作符
- C# is和as操作符
- c#中的is和as运算符
- c#中的is和as运算符
- C#中的is和as
- C#中的is和as
- caffe ubuntu下ctrl+C不能保存模型
- android表情编码与解码
- vbox出现Failed to opencreate the internal network错误,无法启动虚拟机
- Scala中zip或者zipWithIndex的计数器用法
- [资源分享]making a simple RPG in UNITY (教程压缩包分享)
- C#中的is和as操作符
- 【剑指Offer】面试题62:序列化二叉树
- 动态规划法求解硬币找零(Java)
- TP的空操作、空控制器、跨控制器调用
- git部分命令
- (Caffe,LeNet)网络训练流程(二)
- 关于获取RadioGroup里面的RadioButton的值,多行RadioGroup展示清除选中效果
- btrace
- IntelliJ IDEA部署web项目不成功问题