为什么Int32是值类型?

时间:2010-09-20 16:44:05

标签: .net

为什么System.Int32是从System.Object(通过System.ValueType)派生的值类型,而System.Object是引用类型?

3 个答案:

答案 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方法的显式实现。