C# 这些是装箱/拆箱示例吗
是否有2个和3个装箱/拆箱示例 1)文档示例:C# 这些是装箱/拆箱示例吗,c#,boxing,unboxing,C#,Boxing,Unboxing,是否有2个和3个装箱/拆箱示例 1)文档示例: int i = 123; object iBoxed = i; i = (int) iBoxed; 2:装箱/拆箱也一样吗? int i = 123; object iBoxed = i; i = Int32.Parse(iBoxed.ToString()); int i = 123; object iBoxed = i; i = Convert.ToInt32(iBoxed); 3:装箱/拆箱也是吗? int i = 123; object
int i = 123;
object iBoxed = i;
i = (int) iBoxed;
2:装箱/拆箱也一样吗?
int i = 123;
object iBoxed = i;
i = Int32.Parse(iBoxed.ToString());
int i = 123;
object iBoxed = i;
i = Convert.ToInt32(iBoxed);
3:装箱/拆箱也是吗?
int i = 123;
object iBoxed = i;
i = Int32.Parse(iBoxed.ToString());
int i = 123;
object iBoxed = i;
i = Convert.ToInt32(iBoxed);
我假设在所有的例子中,技术上都是一样的
所以我想2和3是装箱/拆箱的例子?装箱的是
对象iBoxed=I
示例2不起作用,因为在所有三个示例中,int.Parse
需要一个字符串:
iBoxed
是i
的盒装副本
在示例2中:
这里不涉及拆箱,因为ToString
是一个虚拟方法,最终将解析为int.ToString
,然后由int.Parse
解析,并在堆栈上返回一个非装箱的int
在示例3中:
iBoxed
将在方法体Convert.ToInt32
中取消装箱,并作为非装箱整数返回堆栈。第二个示例是装箱,但不是取消装箱。无法编译int.parse,因为它需要一个字符串,而iBoxed是一个对象。我认为你是在混合拳击和转换的概念。装箱实际上就是像他们在C中所说的那样获取一个值类型ie POD,并将其视为引用取消装箱是从其容器中提取相同值类型的能力
例2。固定的
int i = 123; // Assigment
object iBoxed = i ; // This is boxing
i = int.parse(iBoxed.toString()); //This is unboxing but only for the twostring method the assignment is a value type copy.
在所有示例中,值类型
i
正在转换为对象。这是拳击的定义。拳击也可以通过以下方式完成:
object boxed = (object)i;
取消装箱是将对象转换回值类型。示例1是拆箱 示例2将无法编译,因为
Parse
需要一个string
参数,但如果使用iBoxed.ToString()
示例3我怀疑没有取消装箱,因为Convert
方法将只返回您传入的值
值得注意的是拳击和拆箱的表现。它比普通赋值更昂贵。我认为是这样,因为你把int放在一个对象“框”中,然后把它从那个框中去掉。box和unbox背后的思想是将值类型更改为引用类型,backI修复了示例2,该示例没有编译。