zoukankan      html  css  js  c++  java
  • 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声明动态类型,在编译时不支持智能感应,只有到运行时才能确定变量的类型
  • 相关阅读:
    初学者--bootstrap(六)组件中的字体图标----在路上(9)
    clearfix的最佳方案----在路上(22)
    css的五种属性值----在路上(21)
    float---浮动带来的影响与清除浮动带来的影响方法----在路上(20)
    form表单 ----在路上(15)
    css中常见的属性-----在路上(14)
    Linux | 管道、重定向命令
    C++ | from_string函数的写法
    C++/C | 关于char* char[] char = new char[n]
    C++内存管理 | 01 C++ memory primitives
  • 原文地址:https://www.cnblogs.com/a2htray/p/4593403.html
Copyright © 2011-2022 走看看