您的位置:首页 > 编程语言 > C#

基础:C#装箱拆箱的计算

2010-07-30 16:25 211 查看
装箱和拆箱过程需要进行大量的计算。对值类型进行装箱时,必须分配并构造一个新对象。次之,拆箱所需的强制转换也需要进行大量的计算.

装箱

装箱用于在垃圾回收堆中存储值类型。装箱是值类型到 object 类型或到此值类型所实现的任何接口类型的隐式转换。对值类型装箱会在堆中分配一个对象实例,并将该值复制到新的对象中。

int i = 123;

object o = i;

在堆栈上创建对象引用 o,而在堆上则引用 int 类型的值。该值是赋给变量 i 的值类型值的一个副本。下图说明了两个变量 i 和 o 之间的差异。



所以此时改变i的值,o的值是不会变的。因为原始值类型和装箱的对象使用不同的内存位置。

拆箱

拆箱操作包括:

检查对象实例,以确保它是给定值类型的装箱值。

将该值从实例复制到值类型变量中。

int i = 123;      // a value type
object o = i;     // boxing
int j = (int)o;  // unboxing



要在运行时成功取消装箱值类型,被取消装箱的项必须是对一个对象的引用,该对象是先前通过装箱该值类型的实例创建的。
尝试取消装箱 null 或对不兼容值类型的引用会导致 InvalidCastException。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: