标签:
拆箱与装箱是一个早就接触的知识点,但是自己并没有系统的总结过,今天我们就来看一下:
一、首先介绍几个知识点:
值类型:
1. 值类型是在栈中分配内存,在声明时初始化才能使用,不能为null。
2. 值类型超出作用范围系统自动释放内存。
3. 主要由两类组成:结构,枚举(enum),结构分为以下几类:
1. 整型(Sbyte、Byte、Char、Short、Ushort、Int、Uint、Long、Ulong)
2. 浮点型(Float、Double)
3. decimal
4. bool
5. 用户定义的结构(struct)
引用类型。
1. 引用类型在堆中分配内存,初始化时默认为null。
2. 引用类型是通过垃圾回收机制进行回收。
3. 包括类、接口、委托、数组以及内置引用类型object与string。
二、.什么是拆箱与装箱?
由于C#中所有的数据类型都是由基类System.Object继承而来的,所以值类型和引用类型的值可以通过显式(或隐式)操作相互转换,而这转换过程也就是装箱(boxing)和拆箱(unboxing)过程。
1、装箱和拆箱是一个抽象的概念
2、装箱是将值类型转换为引用类型 ;拆箱是将引用类型转换为值类型三、.为什么要进行拆箱与装箱?
一种最普通的场景是,调用一个含类型为Object的参数的方法,该Object可支持任意为型,以便通用。当你需要将一个值类型(如Int32)传入时,需要装箱。
另一种用法是,一个非泛型的容器,同样是为了保证通用,而将元素类型定义为Object。于是,要将值类型数据加入容器时,需要装箱。
其实我理解这拆箱和装箱和寄快递是一样的,邮递前你需要包装,到最后还需要拆开,但是不能说包装没有用,它起到了方便运输的作用。
标签:
原文地址:http://blog.csdn.net/gaibian0823/article/details/43206319