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类型(它本身是一个引用...

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

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

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

首先了解下Java的四类八种基本数据类型: 基本类型 占用空间(Byte) 表示范围 包装器类型 boolean ...

装箱(boxing)和拆箱(unboxing)

装箱(boxing)和拆箱(unboxing)是C#类型系统的核心概念.是不同于C与C++的新概念!,通过装箱和拆箱操作,能够在值类型和引用类型中架起一做桥梁.换言之,可以轻松的实现值类型与引用类型的...

深入理解C#的装箱和拆箱

箱和拆箱是值类型和引用类型之间相互转换是要执行的操作。   1. 装箱在值类型向引用类型转换时发生   2. 拆箱在引用类型向值类型转换时发生   光上述两句话不难理解,但是往深处了...

int的一点事,读《深入C#内存管理来分析值类型&引用类型,装箱&拆箱,堆栈几个概念组合之间的区别》

今天稍有点空闲,本来想看看网页啥的,无奈老板坐镇,只好翻开《CLR VIA C#》 有些地方有点迷糊,准备敲代码试一下,打开学习用的项目,突然发现有个以前看《深入C#内存管理来分析值类型&引用类型,...
  • kofkyo
  • kofkyo
  • 2012-07-17 09:21
  • 1252
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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