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类型。如果是,那么在if语句内部执行转换型,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只校验一次对象的类型。if语句只是检查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块上去

As,is含义?using 语句的更多相关文章

  1. DB2错误码信息

    00 完全成功完成 表 3  01 警告 表 4  02 无数据 表 5  07 动态 SQL 错误 表 6  08 连接异常 表 7  09 触发操作异常 表 8  0A 功能部件不受支持 表 9  ...

  2. Java并发编程学习笔记(一)——线程安全性

    主要概念:线程安全性.原子性.原子变量.原子操作.竟态条件.复合操作.加锁机制.重入.活跃性与性能. 1.当多个线程访问某个状态变量并且其中有一个线程执行写入操作时,必须采用同步机制来协同这些线程对变 ...

  3. tinyhttp源码阅读(注释)

    这里就不细述了,代码很简单. 其实现的功能比较若,可以做一个参考. 因为其通过文件的权限位来判断是否是一个CGI脚本,所以在权限位不对的情况下会判断不正确.例如我将这个目录放置在NTFS分区,所有的文 ...

  4. 【转】【MySQL】SQLSTATE详解

    根据 X/Open 和 SQL Access Group SQL CAE 规范 (1992) 所进行的定义,SQLERROR 返回 SQLSTATE 值.SQLSTATE 值是包含五个字符的字符串 . ...

  5. 小白学习mysql之存储过程的优劣分析以及接入控制

    存储过程的优劣 存储过程是一组实现特定功能的SQL语句集合,存储过程一经编译便存储在了服务器上,可以通过调用存储过程的名字以及传入相应的参数来使用存储过程.要高层次的掌握存储过程,不能觉得依葫芦画瓢, ...

  6. Object C语法学习笔记(一)

    1.@property与@synthesize配对使用. @property预编译指令的作用是自动声明属性的setter和getter方法. @synthesize 创建了该属性的访问代码 功能:让编 ...

  7. Sqlstate解释

    本篇文章主要介绍了"Sqlstate详解",主要涉及到方面的内容,对于DB2感兴趣的同学可以参考一下: 根据 X/Open 和 SQL Access Group SQL CAE 规 ...

  8. 《More Effective C++》 条款5 谨慎定义类型转换函数

    ---恢复内容开始--- C++编译器能够在两种数据类型之间进行隐式转换(implicit conversions),它继承了C语言的转换方法,例如允许把char隐式转换为int和从short隐式转换 ...

  9. db2官方SQLSTATE代码提示

    官网地址:http://publib.boulder.ibm.com/infocenter/db2luw/v8/index.jsp?topic=/com.ibm.db2.udb.doc/core/r0 ...

  10. SQL Server截取字符串和处理中文技巧

    一 环境介绍 SQL  Server PRINT @@VERSION MicrosoftSQLServer2012-11.0.2100.60(X64) Feb10201219:39:15 Copyri ...

随机推荐

  1. JAVA 反射应用:properties2Object

    MixAll.java import java.lang.reflect.Method; import java.util.Properties; public class MixAll { /** ...

  2. 如何关闭dell inspiron n4010的内置麦克

    如何关闭dell inspiron n4010的内置麦克 dell inspiron n4010这款电脑的内置麦克是默认开启的,如果你的扩音器音量开得稍大,当你打字的时候就会听到回音,最讨厌的是,当你 ...

  3. Java常用类(String、StringBuffer、Math、Arrays)

    1.String 操作对象时会重新分配堆内存,栈内存的引用会重新指向新的堆内存 2.StringBuffer(字符串缓存区) 操作的对象一直都是一个 3.Math Math.max(xx,xx); M ...

  4. 模板引擎doT.js介绍及如何判断对象为空、如何嵌套循环···

    doT.js 灵感来源于搜寻基于 V8 和 Node.js ,强调性能,最快速最简洁的 JavaScript 模板函数 引入 javascript 文件: <script type=" ...

  5. JavaScript- 获取经度纬度

    昨天获得一个小需求,需要取地理位置. 通过以下的JS能获得经度和纬 if(navigator.geolocation) { navigator.geolocation.getCurrentPositi ...

  6. 建立名称server

    一.实验的目的:     实现DNSserver功能,提供正向.反向解析 二.实验环境     装有Linux的Windows系统 IP为192.168.6.3的虚拟机 三.实验目的 建立gr.org ...

  7. .net自动生成版本号

    在 AssemblyInfo.cs 文件中 修改 一下属性 [assembly: AssemblyVersion("1.0.0.0")] [assembly: AssemblyFi ...

  8. BZOJ 2120: 数颜色 分块

    2120: 数颜色 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/problem.php? ...

  9. WIN8重见开始菜单

    从win7进入win8感觉不适应,做为一个程序开发人员,更觉得不爽,因此想着如何恢复开始菜单,查了很多文章终于找到方法 首先,在桌面版Windows 8启动资源管理器,单击工具栏上的“查看”选项卡后, ...

  10. Playing with ptrace, Part I

    X86_64 的 Redhat / Centos / Scientific 下面,若要编译.运行32位程序,需要安装以下包: yum install libgcc.i686 yum install g ...