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

C# 值类型继承自System.Object…为什么?,c#,object,types,C#,Object,Types,可能的重复项: 嗨, 我就是不明白。Object是(我认为)引用类型,但.NET中的所有数据类型都继承自它。值类型也可以。我不理解它-值类型在堆栈上有它的值,但它是从对象继承的? 希望有人能帮助我理解问问你自己,为什么你认为通常在堆栈上分配的类型会继承自System.Object,这很奇怪,我想你会发现你不能给出一个很好的理由 如果您认为这是因为对象的类型定义了它的分配位置,那么您就错了。ValueType的哪个成员负责定义其分配机制?(就这一点而言,System.Object的哪个成员?)

可能的重复项:

嗨, 我就是不明白。Object是(我认为)引用类型,但.NET中的所有数据类型都继承自它。值类型也可以。我不理解它-值类型在堆栈上有它的值,但它是从对象继承的?
希望有人能帮助我理解

问问你自己,为什么你认为通常在堆栈上分配的类型会继承自
System.Object
,这很奇怪,我想你会发现你不能给出一个很好的理由

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

NET中的类型继承应该包含“是一个”关系:例如,
字符串
是一个
对象。NET世界中的一切都是
对象
,因此
int
对象
double
对象
,等等

你们可以这样想:若我写的代码需要一个
对象
,我应该能够处理
对象
的任何类型,也就是说,任何东西。我的代码应该与
字符串
int
列表
等同样适合


还请注意,
object
保证了所有类型都具有的某些成员:
GetType
ToString
、和
GetHashCode
您可以正确地看到,尽管对象是引用类型,但值类型确实隐式继承自它,如msdn的(根据引用,它们从技术上继承自类,而类又从对象继承


C#为此做了一个特例,因此值类型可以受益于对象的方法(如ToString)还有属性。这样,你可以像对待其他引用类型一样对待值类型——没有什么能阻止你在
对象
s的数组中插入
int

可能重复……你所有的类型都属于我们!-1这是一个非常糟糕的答案。它不能解释任何事情。还有,“is-a”关系并不意味着它必须派生自同一个类。同样,“对象”这并不意味着它必须派生自
System.Object
类。它可能不派生自任何东西,但仍然可以是一个对象。为什么
ValueType
派生自
Object
的问题基本上是一个语义问题,或者类型类别:值类型vs引用类型。@Nawaz不正确。指针不是派生自对象,因此y不是对象。这是一个著名的C#神话,值类型通常在堆栈上分配。@RBT:它们不是在堆栈上分配的吗?不是。大多数时候值类型只进入堆。只有当它们是方法中的局部变量时,它们才会在堆栈上分配。请查看Jon Skeet的著名博客,它会让事情变得更糟好未来从各个方面都很清楚。