c#中的装箱(boxing)和拆箱(unboxin)

转载 2007年09月18日 20:17:00

  c#中的装箱(boxing)和拆箱(unboxin

给一个值装箱(boxing)指隐式地把任何值类型转换成类型对象。当一个值类型被装箱(boxing)时,一个对象实例就被分配,且值类型的值被拷贝给新的对象。
看以下例子:
int nFunny = 2000;
object oFunny = nFunny;
第二行的赋值暗示调用一个装箱(boxing)操作。nFunny整型变量的值被拷贝给oFunny对象。现在整型变量和对象变量都同时存在于栈中,但对象的值居留在堆中。
那么,它暗示着什么呢?它们的值互相独立——在它们之间没有连接。(oFunny没有引用nFunny的值。) 以下代码说明了结果:
int nFunny = 2000;
object oFunny = nFunny;
oFunny = 2001;
Console.WriteLine("{0} {1}", nFunny, oFunny);
 
程序输出结果是:
2001 2000

当代码改变oFunny的值时,nFunny的值并没有改变。只要你脑袋中有这个copy动作,就能够使用值类型的对象功能,发挥出你的巨大优势!
 
拆箱(unboxin)
和装箱(boxing)相比,拆箱(unboxin)是显式操作——必须告诉编译器,你想从对象中抽取出哪一种值类型。当执行消框操作时,C#检测所请求的值类型实际上存储在对象实例中。经过成功的校验,该值被消框。
这就是消框如何执行:
int nFunny = 2000;
object oFunny = nFunny;
int nNotSoFunny = (int)oFunny;
如果错误地请求一个double值
double nNotSoFunny = (double)oFunny;
通用语言运行时(Common Language Runtime,简写CLR)将会引发一个InvalidCastException异常。
 

C#装箱和拆箱(Boxing 和 UnBoxing)

1、什么是装箱和拆箱? 简单来说:       装箱是将值类型转换为引用类型 ;拆箱是将引用类型转换为值类型。(网上广为流传)  C#中值类型和引用类型的最终基类都是Object类型(它本身是一个引用...
  • qiaoquan3
  • qiaoquan3
  • 2016年05月17日 21:44
  • 2646

C#--三行代码带你理解神秘的拆箱和装箱

一、在说拆箱和装箱之前的准备知识首先,我们需要知道c#中有两种类型:值类型和引用类型 名称 值类型 引用类型 表示类型 基本类型 类,数组,接口 ,C#特有的委托. 存储内容...
  • qq_32452623
  • qq_32452623
  • 2016年12月29日 17:22
  • 2446

深入剖析Java中的装箱和拆箱

原文出处: 海子 自动装箱和拆箱问题是Java中一个老生常谈的问题了,今天我们就来一些看一下装箱和拆箱中的若干问题。本文先讲述装箱和拆箱最基本的东西,再来看一下面试笔试中经常遇到的与装箱、拆箱相...
  • zf0512305
  • zf0512305
  • 2016年03月19日 14:39
  • 4126

C#—装箱(boxing)与拆箱(unboxing)

在了解装箱与拆箱之前,首先了解一下两种数据类型:值类型和引用类型。 一、值类型   值类型就是一个包含实际数据的量。当定义一个值类型的变量时,C#会根据它所声明的类型,以堆栈方式分配一块大小相适应...
  • ggibenben1314
  • ggibenben1314
  • 2013年03月12日 10:01
  • 889

C#装箱和拆箱(Boxing 和 UnBoxing)

1、什么是装箱和拆箱? 简单来说:       装箱是将值类型转换为引用类型 ;拆箱是将引用类型转换为值类型。(网上广为流传)  C#中值类型和引用类型的最终基类都是Object类型(它本身是一个引用...
  • qiaoquan3
  • qiaoquan3
  • 2016年05月17日 21:44
  • 2646

C#装箱(Boxing)和拆箱(Unboxing)

知识点  值类型。 值类型是在栈中分配内存,在声明时初始化才能使用,不能为null。 值类型超出作用范围系统自动释放内存。 主要由两类组成:结构,枚举(enum),结构分为以下几类: ...
  • kakaka2011
  • kakaka2011
  • 2012年11月28日 09:40
  • 872

C#学习日记18----装箱(boxing)转换与拆箱(unboxing)转换

经过前面的学习,我们基本能够实现值类型与值类型之间的转换,引用类型与引用类型之间的转换,但是值类型与引用类型(object)之间的转换又该怎么实现呢??    在C# 中,我们采用装箱来实现将值...
  • HC666
  • HC666
  • 2015年10月09日 13:54
  • 883

java 自动拆箱(unboxing)和自动装箱(boxing)

首先了解下Java的四类八种基本数据类型: 基本类型 占用空间(Byte) 表示范围 包装器类型 boolean ...
  • pangfei0
  • pangfei0
  • 2015年09月09日 20:44
  • 284

.NET中六个你必须知道的重要概念之装箱(boxing)和拆箱(unboxing)

说了这么多,在实际编程时怎么使用它们呢?最大的问题是要弄清楚数据从堆栈移到堆的性能损失,反之亦然。   如下图所示,当我们将一个值类型移到引用类型时,数据也从堆栈移到堆中,当我们将引用类型移到值...
  • ddxkjddx
  • ddxkjddx
  • 2012年11月28日 22:43
  • 481

装箱(boxing)和拆箱(unboxing)

装箱(boxing)和拆箱(unboxing)是C#类型系统的核心概念.是不同于C与C++的新概念!,通过装箱和拆箱操作,能够在值类型和引用类型中架起一做桥梁.换言之,可以轻松的实现值类型与引用类型的...
  • wanmdb
  • wanmdb
  • 2011年08月04日 18:38
  • 469
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:c#中的装箱(boxing)和拆箱(unboxin)
举报原因:
原因补充:

(最多只允许输入30个字)