码迷,mamicode.com
首页 > 其他好文 > 详细

值类型,引用类型,装箱,拆箱

时间:2014-07-16 10:56:27      阅读:313      评论:0      收藏:0      [点我收藏+]

标签:style   http   color   os   数据   io   

  • 值类型包括原类型(Sbyte、Byte、Short、Ushort、Int、Uint、Long、Ulong、Char、Float、Double、Bool、Decimal)、枚举(enum)、结构(struct),引用类型包括:类、数组、接口、委托、字符串等。
  • 值型就是在栈中分配内存,在申明的同时就初始化,以确保数据不为NULL;
    引用型是在堆中分配内存,初始化为null,引用型是需要GARBAGE COLLECTION来回收内存的,值型不用,超出了作用范围,系统就会自动释放!
  •  值类型的变量包含自身的数据,而引用类型的变量是指向数据的内存块的,并不是直接存放数据。对于值类型,每个变量都有一份自己的数据复制,对另一个值类型变量的操作并不影响这一个变量的值。 而对于引用类型,两个变量有可能引用同一对象,因此对一个变量的操作会影响到另一个变量。

  • 如果要把一个值类型数据放到堆上,就需要装箱操作;反之,把一个放在堆上的值类型数据取出来,则需要进行拆箱操作。

  • 装箱是将值类型转换为 object 类型或由此值类型实现的任何接口类型的过程。 当 CLR 对值类型进行装箱时,会将该值包装到 System.Object 内部,再将后者存储在托管堆上。 取消装箱将从对象中提取值类型。 装箱是隐式的;取消装箱是显式的。 装箱和取消装箱的概念是类型系统 C# 统一视图的基础,其中任一类型的值都被视为一个对象。
  • 装箱用于在垃圾回收堆中存储值类型。 装箱是值类型到 object 类型或到此值类型所实现的任何接口类型的隐式转换。 对值类型装箱会在堆中分配一个对象实例,并将该值复制到新的对象中。
  • 取消装箱是从 object 类型到值类型或从接口类型到实现该接口的值类型的显式转换。 取消装箱操作包括:

    • 检查对象实例,以确保它是给定值类型的装箱值。

    • 将该值从实例复制到值类型变量中。

  • 要在运行时成功取消装箱值类型,被取消装箱的项必须是对一个对象的引用,该对象是先前通过装箱该值类型的实例创建的。 尝试取消装箱 null 会导致 NullReferenceException 尝试取消装箱对不兼容值类型的引用会导致InvalidCastException
  • 装箱拆箱过程:
  • bubuko.com,布布扣
  • 为什么要减少装箱和拆箱操作:一个就是对于堆的操作效率比较低;另一个就是对于堆上分配的内存资源,需要GC来回收,从而降低程序效率。

值类型,引用类型,装箱,拆箱,布布扣,bubuko.com

值类型,引用类型,装箱,拆箱

标签:style   http   color   os   数据   io   

原文地址:http://blog.csdn.net/chuwachen/article/details/37816215

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!