zoukankan      html  css  js  c++  java
  • 4.2 类型转换

    • CLR 最重要的特性之一就是类型安全,在运行时,CLR 总是知道对象的类型是什么。
    • GetType为非虚方法,所以一个类型不可能伪装成另一个类型。
    • 子类型可以随意转换为基类型(隐式,安全),基类型必须显示转换为子类型。

    使用C#的 is 和 as 操作符来转型

    • is 检查对象是否兼容于指定类型。
    • is 操作符永远不会产生异常。
    • 对象引用为 null , is 总是返回false。
    • 上述代码实际检测两次类型,首先 is 会检查一次类型在类型转换时,CLR还要再次核实 o 是否引用了一个Employee。
    • CLR 首先判断引用变量的实际类型,然后编辑继承层次结构,用每个基类类型去核对指定类型。
    • 使用 as 可以简化写法,并且效率比 is 高。
    • as 的工作方式和强转一样,只是不会抛出异常,当类型不匹配时,返回 null 。


    • 不能重载 is 运算符。
    • 请注意,is 运算符只考虑引用转换、装箱转换和取消装箱转换。 不考虑其他转换,如用户定义的转换。
    • 在 is 运算符的左侧不允许使用匿名方法。 lambda 表达式属于例外。
    • 注意,as 运算符只执行引用转换和装箱转换。 as 运算符无法执行其他转换,如用户定义的转换,这类转换应使用强制转换表达式来执行。
  • 相关阅读:
    [2019 CSP-S赛前集训] [CF1037D] Valid BFS?
    [2019 CSP-S赛前集训] [洛谷P1613] 跑路
    [2019 CSP-S赛前集训] [洛谷P1967] 货车运输
    [洛谷博客] 我的洛谷博客内容搬运
    终于开通了博客
    Qt Creator 添加arm版本的qmake时的问题
    U盘挂载问题
    段错误解决办法
    printf %m
    使用pthread_create()创建线程
  • 原文地址:https://www.cnblogs.com/chiguozi/p/7029575.html
Copyright © 2011-2022 走看看