是不是C#才有装箱和拆箱?
我记得有值类型和引用类型?
值类型可能是int 引用类型是string 和object? 值类型不能为null; 引用类型可以为null,是不是把值类型转换成引用用到装箱?
我记得有值类型和引用类型?
值类型可能是int 引用类型是string 和object? 值类型不能为null; 引用类型可以为null,是不是把值类型转换成引用用到装箱?
解决方案 »
- 怎么理解yield return。。。
- 求助:将字符串中的数据全部加1
- 剪切板复制动画后就不会动了,怎样才能让他粘贴后还能动
- GirdView 并排 2並顯示數據的問題
- 急救 如何在DataGridView控件中验证数据输入 数据输入错误时,弹出错误提示! 源码~~~~~~~~~~~~~~~~~在线等待!!!
- 一个正则表达式的问题,急!!!
- 求助winform项目打开的问题
- 急!!!!请问为什么我调用internetReadFile函数后,Ret总是没有值呢?是哪出了错呢?
- 在线等,为什么用XML里读出的连接字符串 连不上数据库?
- 谁能给一个向xml文档中插入数据的例子?
- 请问vc6.0++做的dllC#2005能否使用?
- 如何判断全角中文?在线等,马上给分!
值类型到引用类型就要用装箱,引用到值类型就要拆箱
装箱和取消装箱使值类型能够被视为对象。对值类型装箱将把该值类型打包到 Object 引用类型的一个实例中。这使得值类型可以存储于垃圾回收堆中。取消装箱将从对象中提取值类型。在此示例中,整型变量 i 被“装箱”并赋值给对象 o。C# 复制代码
int i = 123;
object o = (object) i; // boxing 然后,可以对对象 o 取消装箱并将其赋值给整型变量 i:C# 复制代码
o = 123;
i = (int) o; // unboxing 性能
相对于简单的赋值而言,装箱和取消装箱过程需要进行大量的计算。对值类型进行装箱时,必须分配并构造一个全新的对象。次之,取消装箱所需的强制转换也需要进行大量的计算。
int i = 123; 以下语句对变量 i 隐式应用装箱操作:C# 复制代码
object o = i; // implicit boxing 此语句的结果是在堆栈上创建对象引用 o,而在堆上则引用 int 类型的值。该值是赋给变量 i 的值类型值的一个副本。下图说明了两个变量 i 和 o 之间的差异。装箱转换
还可以像下面的示例一样显式执行装箱,不过显式装箱从来不是必需的:C# 复制代码
int i = 123;
object o = (object) i; // explicit boxing 示例
此示例通过装箱将整数变量 i 转换为对象 o。这样,存储在变量 i 中的值就从 123 更改为 456。该示例表明原始值类型和装箱的对象使用不同的内存位置,因此能够存储不同的值。C# 复制代码
class TestBoxing
{
static void Main()
{
int i = 123;
object o = i; // implicit boxing
i = 456; // change the contents of i System.Console.WriteLine("The value-type value = {0}", i);
System.Console.WriteLine("The object-type value = {0}", o);
}
} 输出
The value-type value = 456 The object-type value = 123