zoukankan      html  css  js  c++  java
  • (一)类型转换 is 和 as

    c# 是强类型语言。

      CLR最重要的特性之一就是 类型安全,在运行时,CLR总是知道对象的类型是什么,C#所有的类的继承自system.Object ,所以都包含GetType方法,调用GetType方法,即可知道对象的确切类型。

    类型转换:

      派生类向基类转换时,可以直接转换(隐式转换)。

      基类向派生类转换时,需要显示转换(注意这里如果要转换的对象不是“派生类类型或派生类的派生类型”,会在运行时抛出异常)。

    使用 is 和 as 转换符

      C#语言还提供了另外一种类型转换的方式,is和as  

      is用来检查对象是否兼容指定类型,返回 true or false ,永远不会抛出异常。

    eg:

    1 if(o is Student)
    2 {
    3    var a = (Student)o;      
    4 }

     上面的代码中  CLR实际上做了两次类型检查,如果每处类型转换都要这样写,那无疑对性能是有很大的影响的,所以C#提供了 as 操作符,目的就是简化上述代码,优化其性能。

    eg :

    1 var a = o as Student
    2 if(a != null)
    3 {
    4     //TODO:  
    5 }

    as 操作符与is一样永远不会抛出异常,但是会直接类型转换操作,如果CLR发现对象无法转换为指定类型,会返回null值,这个时候我们只需要判断对象是否为null就可以了。

    as 只会做一次类型检查加一次判断null值,判断null值要比类型检查容易的多。

    在大多数场景中 ,as都可以替代is。

      

      

  • 相关阅读:
    MATLAB符号运算(2)
    ruby的字符串
    MATLAB符号运算(3)
    ruby的lambda
    MATLAB概率统计函数(2)
    ruby的迭代
    MATLAB优化问题(2)
    ruby的方法和block
    MATLAB优化问题(1)
    ruby的正则表达式操作(3)
  • 原文地址:https://www.cnblogs.com/jasonbourne3/p/11471132.html
Copyright © 2011-2022 走看看