拳击拆箱

use*_*372 0 .net c# 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
*/
Run Code Online (Sandbox Code Playgroud)

在这里它说,即使他的值的值改变了o的值仍然是相同的.如果是,那么o引用值"123"而不是i.是吗?如果o存储了i的值那么当我的价值被改变了,o的价值也会发生变化.如果我错了,请纠正我.

Ham*_*jam 7

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


int i = 123;
// The following line boxes i. 
object o = i;  
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


o = 123;
i = (int)o;  // unboxing
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

请阅读MSDN上完整文章.