2.5 也就是说,int是值类型,object是引用类型。那么,int又怎么能从object派生出来呢?
其实,int并不是从object派生出来的。当一个int数被作为int数使用时,它就是一个值类型实例(保存在栈上)。但是,当它被作为object派生对象使用时,它就是一个引用类型实例,指向堆上的一个整数值。换句话说,当你把int值作为对象来对待时,运行时会自动地将int值转换成一个object引用。这个过程就被称为装箱(boxing)。这个转换的过程包括如下步骤:将int值的内容从栈拷贝到堆,然后创建一个object实例来指向它。解箱(unboxing)则是装箱的逆过程:将对象转换回栈上的值。
int x = 3; // new int value 3 on the stack
object objx = x; // new int on heap, set to value 3 - still have x=3 on stack
int y = (int)objx; // new value 3 on stack, still got x=3 on stack and objx=3 on heap
from http://www.royaloo.com/articles/articles_2002/csharpfaq.htm