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

拆箱与装箱

时间:2015-01-27 23:31:29      阅读:156      评论:0      收藏:0      [点我收藏+]

标签:

     拆箱与装箱是一个早就接触的知识点,但是自己并没有系统的总结过,今天我们就来看一下:

     一、首先介绍几个知识点:

     值类型:

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类型的值相互转换,将值类型与引用类型链接起来 
例如: 
int val = 100; 
object obj = val; 
Console.WriteLine (“对象的值 = {0}", obj); 
这是一个装箱的过程,是将值类型转换为引用类型的过程 

int val = 100; 
object obj = val; 
int num = (int) obj; 
Console.WriteLine ("num: {0}", num); 
这是一个拆箱的过程,是将值类型转换为引用类型,再由引用类型转换为值类型的过程 

注:被装过箱的对象才能被拆箱

三、.为什么要进行拆箱与装箱?

一种最普通的场景是,调用一个含类型为Object的参数的方法,该Object可支持任意为型,以便通用。当你需要将一个值类型(如Int32)传入时,需要装箱。 
另一种用法是,一个非泛型的容器,同样是为了保证通用,而将元素类型定义为Object。于是,要将值类型数据加入容器时,需要装箱。

   其实我理解这拆箱和装箱和寄快递是一样的,邮递前你需要包装,到最后还需要拆开,但是不能说包装没有用,它起到了方便运输的作用。

 

拆箱与装箱

标签:

原文地址:http://blog.csdn.net/gaibian0823/article/details/43206319

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