Loj*_*jol 2 c# boxing unboxing casting
从MSDN我读到装箱/拆箱用于将值类型视为对象.但是当我读到关于ArrayList的内容时,它会读到它也会装箱.所以我很困惑,因为ArrayList将值和引用类型保存为对象.另外,在术语方面,以下不是拆箱,它只是铸造?
ArrayList a=new ArrayList();
a.Add(someClass);
someClass x=(someClass)a[0];
Run Code Online (Sandbox Code Playgroud)
ArrayList对值类型执行装箱,但不对引用类型执行装箱.或者更确切地说,ArrayList本身不会进行拳击 - 编译器会这样做.例如:
ArrayList list = new ArrayList();
list.Add(5);
Run Code Online (Sandbox Code Playgroud)
是有效的
ArrayList list = new ArrayList();
object boxed = 5; // Perform boxing from value type type
list.Add(boxed);
Run Code Online (Sandbox Code Playgroud)
您的示例确实只是强制转换 - 引用转换,而不是取消装箱转换.引用类型值不需要加框以存储在ArrayList- 它已经是引用.
再一次,拳击一般都是如此,而不是特定的ArrayList.拳击只是一种使用值类型值的方法,你真正想要一个引用...引用必须是一个对象,所以CLR创建一个对象来包装值类型值,并返回对该包装器的引用(存储值的"盒子").