博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
As,is含义?using 语句
阅读量:5052 次
发布时间:2019-06-12

本文共 2050 字,大约阅读时间需要 6 分钟。

Is:检查对象是否与给定的类型兼容。例如,下面的代码可以确定MyObject类型的一个实例,或者对象是否从MyObject派生的一个类型:        if(obj is MyObject){}     如果所提供的表达式非空,并且所提供的对象可以强制转换为所提供的类型而不会导致引发异常,则 is 表达式的计算结果将是 true。     如果已知表达式始终是true或始终是false,则is关键字将导致编译时警告,但是通常在运行时才计算类型兼容性。     注意:is运行符不能重载,is运行符只考虑引用转换、装箱转换和取消装箱转换。不考虑其它转换,如果用户定义转换。在Is的左侧不允许使用匿名方法。lambda表达式属于例外。 Object myObject = new Object();      Boolean b1 = (myObject is Object);      true.       Boolean b2 = (myObject is Employee);    false.      如果对象引用是null,is总是返回false,因为没有可检查其类型的对象。 is通常像下面这样使用:     if (myObject is Employee)      {
           Employee myEmployee = (Employee)myObject;      }     在这段代码中,CLR实际会检查两次对象的类型。is运算符首先核实myObject是否兼容于Employee类型。如果是,那么在内部执行转换型,CLR会再次核实myObject是否引用一个Employee。CLR的类型检查增加了安全性,但这样对性能造成一定影响。这是因为CLR首先必须判断变量(myObject)引用的对象的实际类型。然后,CLR必须继承层次结构,用每个型去核对指定的类型(Employee)。由于这是一个相当常用的编程模式,所以C#专门提供了as运算符,目的就是简化这种代码写法,同时提升性能。 as:用于检查在兼容的之间执行某些类型的转换。     Employee myEmployee = myObject as Employee;     if (myEmployee != null)     { }     在这段代码中,CLR核实myObject是否兼容于Employee类型;如果是,as会返回对同一个对象的一个非null      的引用。如果myObject不兼容于Employee类型,as运算符会返回null。     注意:as运算符造成CLR只校验一次对象的类型。只是检查myEmployee是否为null。这个检查的速度比校验对象的类型快得多。 as运算符的工作方式与一样,只是它永远不会抛出一个异常。相反,如果对象不能转换,结果就是null。所以,正确的做法是检查最终生成的一引用是否为null。如果企图直接使用最终生成的引用,会抛出一个System.NullReferenceException异常。以下代码对此进行了演示:     Object o = new Object();        新建一个Object对象。     Employee e = o as Employee;     将o转型为一个Employee     e.ToString();                   访问e会抛出一个NullReferenceException异常     备注:     as运算符类似于强制转换操作。但是无法进行转换,则as返回null而非引发异常。     示例:     expression as Type它等效于以下表达式,但是只计算一次expression。     expression is Type ?(Type)expression : (Type)null     注意:as运算符只执行引用转换和装箱转换。as运算符无法执行其它转换,如果用户定义的转换,这类转换应使用强制转换表达式来执行。
 
 
using 语句,定义泛型委托 1.提供能确保正确使用 IDisposable 对象的方便语法。 using (System.IO.StreamReader sr = new System.IO.StreamReader(@"C:\Users\Public\Documents\test.txt")) {
    string s = null;     while((s = sr.ReadLine()) != null)     {
        Console.WriteLine(s);     } } 其实就是多加了try块和finally块上去

转载于:https://www.cnblogs.com/zhangyanhai/p/3364552.html

你可能感兴趣的文章
python3 下的文件输入输出特性以及如何覆盖文件内容和接下去输入
查看>>
linux OA搭建
查看>>
清除远程桌面连接历史记录
查看>>
使用matlab遇到的问题
查看>>
Java中的HashMap遍历和C#的字典遍历
查看>>
21_listview展示数据内容回顾
查看>>
在手机网络情况下,Android的微信页面不能播放背景音乐
查看>>
SpringBoot:第二篇 集成日志lombok
查看>>
【Python】新建自定义个数的自定义长度名字
查看>>
区块链与比特币小结
查看>>
也说python的类--基于python3.5
查看>>
Oracle 存储过程
查看>>
HashMap原理阅读
查看>>
冲刺7
查看>>
html5 drag 文件拖拽浅淡
查看>>
window安装Scrapy———解决报错问题
查看>>
关于VS2010编译警告LNK4221
查看>>
简单的一个程序,猜字游戏
查看>>
软件架构阅读笔记07
查看>>
关于使用pageoffice插件实现导出数据到excel文档中
查看>>