首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

c#的一个装箱和拆箱的有关问题

2011-12-25 
c#的一个装箱和拆箱的问题在C#中,可以通过装箱和拆箱实现值类型与引用类型之间相互转换,在下列代码中,有()

c#的一个装箱和拆箱的问题
在C#中,可以通过装箱和拆箱实现值类型与引用类型之间相互转换,在下列代码中,有()处实现了装箱
int age = 5;
object o = age;
o = 10;
age = (int)o;
object oAge = age;


[解决办法]
3
[解决办法]

object o = age; 
o = 10; 
object oAge = age; 

[解决办法]
简单一点的理解,装箱,就是变成一个通用对像(Object),拆箱就是从Object,转换成你想要的对像

[解决办法]
哪三个呢,
============================

object o = age;
o = 10;
object oAge = age;
[解决办法]

C# code
int age = 5; object o = age; //装箱1o = 10; //装箱2age = (int)o; object oAge = age; //装箱3
[解决办法]
算了,我还是写明了吧,不知道为什么有这么多人同意是2次boxing,我们来把这段C#代码转换成IL代码,如下:
 .locals init ([0] int32 age,
[1] object o,
[2] object oAge)
IL_0000: nop
IL_0001: ldc.i4.5
IL_0002: stloc.0
IL_0003: ldloc.0
IL_0004: box [mscorlib]System.Int32
IL_0009: stloc.1
IL_000a: ldc.i4.s 10
IL_000c: box [mscorlib]System.Int32
IL_0011: stloc.1
IL_0012: ldloc.1
IL_0013: unbox.any [mscorlib]System.Int32
IL_0018: stloc.0
IL_0019: ldloc.0
IL_001a: box [mscorlib]System.Int32
IL_001f: stloc.2

看行IL_0004, IL_000c和IL_001a,非常明确的3次boxing。不要以为o = 10;那一行直接就产生了object 10,一样要box的。

热点排行