可能重复:
什么是装箱和拆箱以及有什么权衡?
嗨,从我的理解:当我将值类型的数据分配给(引用)类型对象变量时,它被装箱并且结果不是实际引用,因为它指向存储在堆上的值的副本.是对的吗?谢谢
嗯,不太好.(我开始误读你的帖子.)
结果是一个真正的参考 - 但它不是指你原来的变量.它指的是堆上的一个对象,它包含变量在装箱时所持有的值的副本.特别是,更改变量的值不会更改框中的值:
int i = 10;
object o = i;
i = 11;
Console.WriteLine(o); // Prints 10, not 11
Run Code Online (Sandbox Code Playgroud)
C#不允许您直接访问框内的值 - 您只能通过拆箱并获取副本来获取它.另一方面,C++/CLI允许单独访问框内的值,甚至更改.(您仍然可以使用C#更改框中的值 - 例如,如果值类型实现了某个接口,并且接口方法会改变该值.)
导致装箱的引用类型通常是"对象",但它可能是值类型实现的某个接口,或者只是System.ValueType.