二者是不存在装箱和拆箱的,书中说的应该有错误吧。要想看是否装箱和拆箱,最简单的办法就是反汇编看以下IL代码,如果出现了box指令则装箱,如果出现了unbox指令则拆箱。
你用IL反汇编一下就知道了,下面是大致的IL代码:
可以发现,里面根本没有任何box和unbox指令,因此没有发生装箱和拆箱。如果对此还是持有怀疑,可以继续查看一下Convert.ToInt32(string)方法,你会发现这个方法调用了Int的Parse方法,而在这个Parse方法内也没有出现box和unbox指令。
现在有必要重温一下装箱和拆箱的概念了,装箱的有两大前提,第一是必须具有派生关系,int派生于ValueType,而ValueType派生于object,所以将int装换为object存在装箱,第二必须是从值类型到引用类型。二者缺一不可。而int和string显然只满足了第二点,但不满足第一点,故不存在派生关系。
可以想象,从int到IComparable直接肯定存在装箱和拆箱关系,因为int继承了IComparable,而接口又是引用类型。
|
|