zoukankan      html  css  js  c++  java
  • C#中的is和as的转型区别

    摘自CLR via C#第三版第四章

    在c#中is可以用来判断一个对象是否兼容给定的类型,如果是返回true,否则返回false。

    同时is是永不会抛出异常的。如果对象引用是null,is操作符总是返回false。

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

    一般is操作符的使用方式如下

    //先进行判断
    if( o is Employee){
        Employee e = (Employee) o;
       .....
    }

    在该过程中CLR实际会检查两次对象类型,首先is操作符检查o是否兼容Employee,如果是在if内部

    CLR会再次核实o是否引用一个Employee。这会对性能造成一定影响。这是因为CLR首先必须判断o引用的

    对象实际的类型,然后遍历继承层次结构,用每个基类型去核对。

    C#提供了as操作符来简化这种代码的写法,来提高性能。

    Employee e = o as Employee;
    if(e !==null){
    }

    如果o兼容于Employee,as会返回同一个对象的非null引用。如果不兼容,会返回null。as操作符CLR只会校验一次对象的类型。

    同时它也永远不会抛出异常,所以要检查生成的引用是否为null。

  • 相关阅读:
    JS中声明变量的细节问题
    你不知道的var! 细节
    读书笔记:对象的属性
    手写new操作符
    slice
    全相等函数 isEqual
    几个面试题
    全相等函数
    剑指 Offer 29. 顺时针打印矩阵
    剑指 Offer 28. 对称的二叉树
  • 原文地址:https://www.cnblogs.com/yanbinliu/p/3753328.html
Copyright © 2011-2022 走看看