概念
装箱和拆箱是一个抽象的概念,由于C#中所有的数据类型都是由基类System.Object继承而来的,利用装箱和拆箱功能,可通过允许值类型的任何值与Object 类型的值相互转换,将值类型与引用类型链接起来
装箱与拆箱
装箱: 值类型 -> 引用类型
int valType = 100;
object refType = valType; //装箱操作
Console.WriteLine ("对象的值 = {0}", obj);
拆箱: 引用类型 -> 值类型
int valType = 100;
object ref = valType; //装箱操作
int num = (int) refType; //拆箱操作
Console.WriteLine ("num: {0}", num);
值类型与引用类型
- 值类型
- 值类型是在栈中分配内存,在声明时初始化才能使用,不能为null
- 值类型超出作用范围系统自动释放内存
- 主要由两类组成:结构,枚举(enum),结构分为以下几类:
- 整型(Sbyte、Byte、Char、Short、Ushort、Int、Uint、Long、Ulong)
- 浮点型(Float、Double)
- decimal
- bool
- 用户定义的结构体(struct)
- 引用类型
- 引用类型在堆中分配内存,初始化时默认为null
- 引用类型是通过垃圾回收机制(GC)进行回收
- 分为以下几类:
- 内置引用类型object与string
- 数组
- 接口
- 委托
- 类(与结构体对应)
注意!
装箱与拆箱非常消耗效率,应该尽量避免频繁的装箱拆箱操作