值类型继承自System.Object ...为什么?

时间:2011-01-18 21:13:54

标签: c# object types

  

可能重复:
  Is everything in .NET an object?
  How do ValueTypes derive from Object (ReferenceType) and still be ValueTypes?

您好, 我就是不明白。 System.Object是(我认为)引用类型,但.NET中的所有数据类型都继承自它。值类型也是如此。我不明白它 - 值类型在堆栈上有它的值,但它继承自Object? 希望有人能帮我理解

2 个答案:

答案 0 :(得分:6)

你是正确的,虽然Object是一个引用类型,值类型确实从它继承隐式,如msdn对Value Types的引用所述(根据参考,它们在技术上继承来自ValueType类,而后者继承自Object。

C#为此做了一个特例,因此值类型可以从Object的方法(如ToString)和属性中受益。此外,您可以像处理其他引用类型一样处理值类型 - 没有什么可以阻止您插入int数组中的Object

答案 1 :(得分:5)

问问自己为什么你认为通常在堆栈上分配的类型会从System.Object继承而且我认为你会发现你无法形成一个很好的理由,这很奇怪。

如果您认为这是因为对象的类型定义了它的分配位置,那就错了。 ValueType的哪个成员负责定义其分配机制? (System.Object的成员是什么?)

.NET中的类型继承应该包含“”关系:例如,string object。 .NET世界中的 Everything object,因此intobjectdoubleobject等等。

您可以根据Liskov substitution principle来考虑这一点:如果我编写的代码需要object,我应该能够处理任何类型 一个object - 即任何东西。对于stringintList<int>等,我的代码应该同样适用。

另请注意,object可以保证所有类型的成员都有这样的结果:GetTypeToStringGetHashCode