值类型inheritance自System.Object …为什么?
可能重复:
.NET中的所有内容都是对象吗?
ValueTypes如何从Object(ReferenceType)派生而仍然是ValueTypes?
嗨,我只是不明白。 System.Object是(我认为)引用类型,但.NET中的所有数据类型都inheritance自它。 值类型也是如此。 我不明白 – 值类型在堆栈上有它的值,但它inheritance自Object? 希望有人能帮助我理解
你是正确的,虽然Object是一个引用类型,值类型确实隐式地从它inheritance,如msdn对值类型的引用所述(根据引用,它们在技术上inheritance自ValueType类,而ValueType类inheritance自Object。
C#为此做了一个特例,因此值类型可以从Object的方法(如ToString)和属性中受益。 此外,这样,您可以像处理其他引用类型一样处理值类型 – 没有什么可以阻止您插入Object
数组中的int
。
问问自己为什么你认为通常在堆栈上分配的类型会从System.Object
inheritance而且我认为你发现你无法形成一个很好的理由,这很奇怪。
如果您认为这是因为对象的类型定义了它的分配位置,那么您就错了。 ValueType
哪个成员负责定义其分配机制? (对于那个问题, System.Object
成员是什么?)
.NET中的类型inheritance应该包含“ 是 ”关系:例如, string
是 object
。 .NET世界中的所有东西 都是一个object
,因此int
是一个object
, double
是一个object
,等等。
您可以根据Liskov替换原则来考虑这个问题:如果我编写需要object
代码,我应该能够处理任何类型的object
任何东西。 我的代码应该同样适用于string
, int
, List
等。
另请注意, object
保证某些成员所有类型都具有以下结果: GetType
, ToString
和GetHashCode
。