在诸如bool
,int
等的Java类型中,原始类型即为原始类型,也就是说,它们与引用类型本质上是不同的,这就是Java提供用于对原始类型进行装箱和拆箱的功能的原因。
但是在Microsoft CLR中,值类型继承自System.ValueType
,而其本身继承自System.Object
。那么,为什么在Microsoft CLR中需要装箱和拆箱呢?
一个原因可能是ValueType
类提供了一些底层的技巧,这些技巧使值类型的处理与C结构有些相似。但是,如果值类型与引用类型有很大不同,为什么要使ValueType
继承自Object
?
如果我说些无知的话,请原谅我。我没有太多的语言设计经验。对我而言,只是CLR的类型系统不像Java那样连贯。