Object。

。如图:

   每种值类型均有一个隐式的默认构造函数来初始化该类型的默认值,注意所有的值类型都是密封(sealed)的,所以无法派生出新的值类型。而且System.ValueType 本身是一个类类型,而不是值类型,因为它重写了 Object.Equals(Object),所以对值类型将按照实例的值来比较,而不是 比较引用地址。 
从内存分配上来看,值类型通常分配在线程的堆栈上,作用域结束时,所占空间自行释放,效率高,无需进行地址转换,而引用类型通常分配在托管堆上,由 GC 来控制其回收,需要进行地址转换,效率降低,这也正是c#需要定义两种数据类型的原因之一。c#中值类型变量直接把变量的值保存在堆栈中,引用类型的变量把实际数据的地址保存在堆栈中,而实际数据则保存在堆中。

相互转换(装箱/拆箱).

装箱和取消装箱能够使任何类型像对象一样进行处理。

 

 

相关文章: