C# 装箱 拆箱

C# 装箱、拆箱(取消装箱)

 装箱(boxing)是隐式的将一个值型转换为引用型对象。 拆箱(unboxing)就是将一个引用型对象转换成合适值型,一般是对装箱的变量进行拆箱。

装箱和取消装箱使值类型能够被视为对象。对值类型装箱将把该值类型打包到 Object 引用类型的一个实例中。这使得值类型可以存储于垃圾回收堆中。取消装箱将从对象中提取值类型。在此示例中,整型变量 i 被“装箱”并赋值给对象 o

int i = 1; object o = 5;  // boxing,装箱可以隐式类型转换
然后,可以对对象 o取消装箱并将其赋值给整型变量 i: i = ( int)o;  // unboxing此时i=5,取消装箱是要显示强制类型转换的

 

相关知识: C#程序的运行是在把程序代码加载到内存之后,而程序中的变量、方法在内存存放的区域是不同的,这有助于程序更高效率的运行。C#的值型包括枚举(enum),结构(structure)和基本类型(int, float, short等),是存放在栈里的,值型不需要Garbage Collection来回收占用的内存。超出了作用范围后,系统会自动释放。引用类型(一般就是只的类类型)在堆中分配内存,ky初始化为null。引用型是需要Garbage Collection来回收内存的。

什么是堆?什么是堆栈? heap:是由malloc之类函数分配的空间所在地。地址是由低向高增长的。 stack:是自动分配变量,以及函数调用的时候所使用的一些空间。地址是由高向低减少的。

1、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,存放的是不知道大小的一些类型。
2、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。存放的是知道大小的一些类型如int、char类型。
3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 - 程序结束后由系统释放
4、文字常量区 —常量字符串就是放在这里的。 程序结束后由系统释放
5、程序代码区—存放函数体的二进制代码。
C# 装箱 拆箱_第1张图片

你可能感兴趣的:(C# 装箱 拆箱)