我在C#中搜索拳击和拆箱时发现了以下代码片段。
class TestBoxing
{
static void Main()
{
int i = 123;
// Boxing copies the value of i into object o.
object o = i;
// Change the value of i.
i = 456;
// The change in i does not effect the value stored in o.
System.Console.WriteLine("The value-type value = {0}", i);
System.Console.WriteLine("The object-type value = {0}", o);
}
}
/* Output:
The value-type value = 456
The object-type value = 123
*/
在这里它说,即使他的值改变了o的值仍然是相同的。如果是,那么o引用值“123”而不是i。是吗?如果o存储了i的值然后当I的值改变时,o的值也会改变。如果我错了,请纠正我。
答案 0 :(得分:6)
拳击是将值类型转换为类型对象或的过程 到此值类型实现的任何接口类型。当CLR 选中一个值类型,它将值包装在System.Object和 将其存储在托管堆上。取消装箱从中提取值类型 物体。拳击是隐含的;拆箱是明确的。的概念 装箱和拆箱是类型系统的C#统一视图的基础 其中任何类型的值都可以被视为对象。
int i = 123;
// The following line boxes i.
object o = i;
o = 123;
i = (int)o; // unboxing
答案 1 :(得分:0)
装箱:-从值类型转换为引用类型的过程例如
int val = 10;
object Obj = val;
UnBoxing:-与装箱完全相反,例如,将引用类型转换为值类型的过程
int val2 = (int)Obj;