• 05.基元类型、引用类型和值类型


     基元类型:编译器直接支持的类型称为基元类型,直接映射到Framework类库中存在的类型
     
        不安全转换表示数值丢失精度和数量级
     
        文本常量看成类型本身的一个实例
     
        checked和unchecked基元类型操作,用于规定是否检查溢出 ,可以用于一个表达式,也可以用于多条语句
        CLR有一个add指令,将两个数相加不会检查溢出,还有一个add.vof会检查溢出
        
        值类型的实例一般在线程栈中分配,在代表值类型实例的变量中,并不包含一个指向实例的指针,变量包含了实例本身的字段
        
        所有的值类型都是System.ValueType的直接派生类,System.ValueType又是System.Object的派生类,所有的枚举都有System.Enum派生,System.Enum又是从System.ValueType派生
        
        如果使用new操作符,C#会默认对实例进行了初始化,初始化为默认值
     
        1.值类型对象有两种表示形式:未装箱和已装箱,引用类型总是处于已装箱的形式
        2.不能将值类型作为其它类型的基类,所以值类型中不能有抽象的方法和虚方法
        3.引用类型的变量包含一个在堆上一个对象的地址,值类型变量包含基础类型的一个值
        4.值类型的复制会执行一次逐字段的复制,引用类型的复制只会复制地址
     
        值类型的装箱和拆箱
        值类型进行装箱操作
        1.在堆上分配好内存
        2.将值类型的字段复制到新分配堆内存
        3.返回对象的地址
     
        对象的相等性和同一性
        从System.Object中提供了一个名为Equals的虚方法,它的作用是在两个对象包含相同的值的前提下返回true,相对于Object中的Equals方法实现的是同一性,而不是值的相等性
     
         对象哈希码
        System.Object提供一个虚方法GetHashCode,用于获取对象的Int32哈希码
     
        一个类型定义了Equals方法后,一定要定义GetHashCode,因为在System.Collections.Hashtable类型、System.Collection.Generic.Dictionary类型以及其它一些集合类型中,要求两个对象相等,必须具有相同的哈希码
     
        dynamic基元类型
        可以用dynamic 表达式/变量调用一个成员,比如字段、属性/索引器、方法、委托以及一元/二元/转换操作符
        使用dynamic声明动态类型,在编译时不支持智能感应,只有到运行时才能确定变量的类型
  • 相关阅读:
    定位CPU占用高的线程并打印其堆栈信息
    单生产者和单消费者共同操作同一个消息队列需要加锁吗
    cmake多目录,生成so的模板
    【秒懂音视频开发】25_H.264解码实战
    【秒懂音视频开发】24_H.264编码实战
    【秒懂音视频开发】23_H.264编码
    【秒懂音视频开发】22_显示YUV图片
    【秒懂音视频开发】21_显示BMP图片
    【秒懂音视频开发】20_视频录制02_编程
    【秒懂音视频开发】19_视频录制01_命令行
  • 原文地址:https://www.cnblogs.com/a2htray/p/4593403.html
Copyright © 2020-2023  润新知