为什么System.Int32是从System.Object(通过System.ValueType)派生的值类型,而System.Object是引用类型?
答案 0 :(得分:11)
因为System.ValueType
允许我们通过覆盖System.Object中的某些虚拟成员来使用装箱/取消装箱。
答案 1 :(得分:1)
http://msdn.microsoft.com/en-us/library/system.valuetype.aspx解释得非常好:
数据类型分为值 类型和引用类型。价值类型 是堆栈分配还是 在结构中内联分配。 引用类型是堆分配的。 参考和值类型都是 源自最终基类 宾语。
如果需要a 值类型表现得像一个对象,a 使值类型看起来的包装器 像分配参考对象一样 在堆上,以及值类型 值被复制到其中。包装器 标记,以便系统知道它 包含值类型。这个过程是 称为拳击,反之亦然 进程称为拆箱。拳击 和取消装箱允许任何类型 作为对象对待。
答案 2 :(得分:1)
摘自https://msdn.microsoft.com/en-us/magazine/cc301569.aspx
值类型对象有两种表示形式:未装箱的表格和装箱的表格。引用类型始终采用盒装形式。
值类型是从System.ValueType隐式派生的。此类型提供与System.Object定义的方法相同的方法。但是,System.ValueType会覆盖Equals方法,以便在两个对象的值为0时返回true。实例字段匹配。此外,System.ValueType会覆盖GetHashCode方法,以便使用算法生成哈希码值,该算法会考虑对象中的值。实例字段。定义自己的值类型时,强烈建议您覆盖并提供Equals和GetHashCode方法的显式实现。