拳击拆箱

时间:2014-12-20 00:01:10

标签: c# .net boxing unboxing

我在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的值也会改变。如果我错了,请纠正我。

2 个答案:

答案 0 :(得分:6)

  

拳击是将值类型转换为类型对象或的过程   到此值类型实现的任何接口类型。当CLR   选中一个值类型,它将值包装在System.Object和   将其存储在托管堆上。取消装箱从中提取值类型   物体。拳击是隐含的;拆箱是明确的。的概念   装箱和拆箱是类型系统的C#统一视图的基础   其中任何类型的值都可以被视为对象。


int i = 123;
// The following line boxes i. 
object o = i;  

enter image description here


o = 123;
i = (int)o;  // unboxing

enter image description here

请阅读full article on MSDN

答案 1 :(得分:0)

装箱:-从值类型转换为引用类型的过程例如

int val = 10;
object Obj = val;

UnBoxing:-与装箱完全相反,例如,将引用类型转换为值类型的过程

int val2 = (int)Obj;