按定义我们知道
Boxing – Converts value-type TO reference type. Stored on heap.
UnBoxing – Converts reference type TO value-type. Stored on stack.
但是为什么我要将值类型转换为引用类型或将我的变量从堆栈推送到堆栈或从堆栈转换为堆栈。
这样做的优点和缺点是什么。
我们通过这样做得到了什么。是什么用的。
我们希望将值类型转换为引用类型或将变量从堆栈推送到堆中。我们希望用堆来实现我们无法使用堆栈或者使用堆栈进行unBoxing而无法使用堆。
我知道这个典型的例子
Int32 x = 10;
object o = x ; // Implicit boxing
Int32 y = 10;
object obj = (object) y; // Explicit Boxing
x = o; // Implicit UnBoxing
请给别的。
答案 0 :(得分:4)
在C#中,你通常不知道拳击何时发生,至少在.NET 2.0泛型中,不需要经常装箱(在.NET 1.x中,如果你想拥有ArrayList
对于整数,您必须先将它们打包,因为ArrayList
仅适用于object
s。
但是你将使用拳击的主要地方是在只接受对象的函数调用中。最明显的例子是Console.WriteLine
(或string.Format
),其参数为object
s。例如:
int n = 1234;
Console.WriteLine("A number: {0}", n);
整数n
被装箱到object
引用,以便传递给Console.WriteLine
方法。