2012-04-01 82 views
-4

如果我写装箱和拆箱的概念

int i=100; 

那么是否得到存储为int在内存中以4个字节为object存储,并在它的使用检索拆箱概念的时间(INT从对象类提取类型对象)。

回答

3

否你的例子中没有装箱,int只需要4个字节。只有在object变量中手动存储值类型时才会出现拳击。

int i = 100;  // No boxing 
i = i + 1;  // No boxing 
object o = i;  // Boxing 
int j = (int)o; // Unboxing 
+0

很好谢谢这么多 – 2012-04-01 07:20:55

0

理解拳击最简单的方法是了解一些细节如何值类型和引用类型中的CLI/CLR(框架的执行从一个C#或其他.NET编译器输出端上的层)的处理方式。特别是,需要认识到,对于每种值类型,框架还定义了一个相应的密封参考类型,该参考类型源自类System.ValueType(继而从System.Object继承),并具有与原始值类型(*)相同的公共和专用字段。值类型的存储位置始终为保持值类型,而引用类型始终为的存储位置保存引用类型。没有例外。如果尝试在需要引用类型的情况下使用值类型,系统将创建与该值类型相对应的引用类型的新实例,从要存储的值中复制公用和专用字段,以及然后使用新的实例。这被称为“拳击”。

请注意,尽管C#假装所有值类型都从System.Object继承,但这样的语句依赖于“继承”的松散定义,该定义可能比有用的更容易混淆。如果一个定义语句“X继承Y”表示“的X实例可以被隐式用作Y实例”,然后拆箱值类型做继承Object,但它们的值可以被复制到装箱值类型的实例,其做。