• (一)类型转换 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。

      

      

  • 相关阅读:
    关于C#中timer类 (转)
    AutoResetEvent (转)
    给韬哥的回复
    sql中的case when 的用法涉及到大于小于号
    vba中获取当前日期
    vba中的小技巧
    sql server2000中的两个整数相除保留十位小数
    vba中新建文件,关闭文件,锁屏,覆盖同名文件
    无法切换到google.com的解决办法
    mysql 常用命令
  • 原文地址:https://www.cnblogs.com/jasonbourne3/p/11471132.html
Copyright © 2020-2023  润新知