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。

  • 相关阅读:
    p(str or array) 传递数据以易于阅读的样式格式化后输出 bootstarp样式的打印函数
    [Err] 1067
    php 正则表达式
    Docker使用及dnmp构建
    记一次Ubuntu18.04升级到19.10的经历
    面试-Redis
    ubuntu截图软件deepin scrot
    docker 搭建 Hadoop
    Docker 遇到的坑
    RabbitMQ遇到的坑
  • 原文地址:https://www.cnblogs.com/yanbinliu/p/3753328.html
Copyright © 2011-2022 走看看