值类型和引用类型误区

来源:互联网 发布:重庆邮电大学就业知乎 编辑:程序博客网 时间:2024/06/11 16:58
  1. 结构是轻量级类
    原因:
    1.1 值类型不能或不应该具有方法或者其它具有意义的行为,应该只是作为一种数据转移类型来使用。
    反例:DateTime类型,它应该具有赋予它值计算的能力。
    因此,决定其语义是值类型还是引用类型,应该根据需要来确定,而不是取决于这个类型是否简单。
    1.2 因为性能,显得值类型比引用类型轻。
    值类型不需要垃圾回收,不会因为被标识而产生开销,也不需要解引用,但如果在传递参数,赋值和返回值时,采用引用类型则开销更少,因为只需要指向地址即可,而不需要复制整个数据。
  2. 引用类型保存在堆上,值类型保存在栈上
    引用类型的实例是总是在堆上的。但对于变量的值来说,则是存储在它声明的位置,所以对于一个值类型变量来说,则也和该实例的其它数据绑定在一起存储在堆上,只有局部变量值类型值和参数值类型值存储在栈上。
  3. 对象在C#中默认是通过引用传递的
    引用类型变量的值是引用而不是对象本身。