值类型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.Objectinheritance而且我认为你发现你无法形成一个很好的理由,这很奇怪。

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

.NET中的类型inheritance应该包含“ ”关系:例如, string object 。 .NET世界所有东西 都是一个object ,因此int是一个objectdouble是一个object ,等等。

您可以根据Liskov替换原则来考虑这个问题:如果我编写需要object代码,我应该能够处理任何类型的object任何东西。 我的代码应该同样适用于stringintList等。

另请注意, object保证某些成员所有类型都具有以下结果: GetTypeToStringGetHashCode