• NET基础(3):is 和 as 操作符


      在C#语言中进行类型转换的另外一种方式是使用is和as操作符。is检查对象是否兼容于指定类型,返回Boolean值true或false。注意,is操作符永远不抛出异常,例如以下代码:

    Object o = new Object();
    
    Boolean b1 = (o is Object);    //返回true
    Boolean b2 = (o is Employee);    //返回false
    

      如果对象引用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引用。如果o不兼容与Employee类型,as 返回null。注意,as操作符造成CLR只检验一次对象类型。if语句只检测e是否为null;这个检查速度比检验对象的类型要快的多。

         as 操作符的工作方式与强制类型转换一样,只是它永远不会抛出异常,如果对象不能转型,结果就是null。所以,正确做法是检查最终生成的引用是否为null。

  • 相关阅读:
    扩展Dijkstra
    CodeForces 1396E. Distance Matching
    大联盟2
    整式乘除法
    美国数学会众多教授推荐的本科&研究生代数几何经典书籍教材清单
    算法题——立方体的体对角线穿过多少个正方体?
    导数练习题
    导数压轴题
    集合
    著名数学家Ky Fan的故事
  • 原文地址:https://www.cnblogs.com/sunyj/p/5537608.html
Copyright © 2020-2023  润新知