C#:是可空类型(int?)对象吗?

C#:是可空类型(int?)对象吗?,c#,object,nullable,C#,Object,Nullable,我从C#中的值类型不是对象这一点上理解。也就是说,它们不会从System.Object继承 假设我的逻辑到目前为止仍然有效,则是可为空的类型,例如int?,对象。它们是从对象继承的吗 如果是这样的话,它们是否受到与其他对象相同的规则和约束,或者是否有特殊的规则来管理它们的行为 正如引用一样,这个问题来自于对null coalesce操作符工作方式的调查。不正确-值类型是对象,但它们的行为与引用类型不同-它们是按值传递,而不是按引用传递。因此,Nullable(这就是T?是什么)是一个结构,因此继

我从C#中的值类型不是对象这一点上理解。也就是说,它们不会从System.Object继承

假设我的逻辑到目前为止仍然有效,则是可为空的类型,例如int?,对象。它们是从对象继承的吗

如果是这样的话,它们是否受到与其他对象相同的规则和约束,或者是否有特殊的规则来管理它们的行为

正如引用一样,这个问题来自于对null coalesce操作符工作方式的调查。

不正确-值类型是对象,但它们的行为与引用类型不同-它们是按值传递,而不是按引用传递。因此,
Nullable
(这就是
T?
是什么)是一个结构,因此继承自System.ValueType和System.Object。C#编译器中有一种魔力,使可空类型在null和???方面的行为与引用类型相同,但它们始终具有按值复制语义。

您是在问“从System.Object继承”还是“引用类型”

值类型确实继承自System.Object,但它们不是引用类型

可空类型也是值类型,因此它们也不是引用类型,但它们确实从System.Object继承

请注意,作为程序员,您可以声明的内容与系统提供的内容有所不同

值类型确实从System.Object继承,但您不能自己声明值类型从任何对象继承

值类型从System.ValueType派生,而后者又从System.Object派生


所以从技术上讲,所有的值类型都是从System.Object派生出来的。

一切都是一个对象,值类型只是结构而不是类。

嘿,你应该更仔细地阅读链接的问题和答案。值类型也派生自
System.Object
,只是间接地;否则他们就不会有像
object.GetHashCode
object.ToString
这样的方法。关于
Nullable
,你的问题是什么?他们有什么问题?谢谢。我很可能误读了信息(可能是误传的)。值类型不是“存储在堆栈而不是堆上的对象”。可能它们通常存储在堆栈上,但并不总是如此,而且肯定不是这一点区分了值类型和ref类型。是的,值类型可以装箱,可以在类中(以及ref类实例中的堆中),但这是思考和交流它们的行为的最简单方式。关键是,值类型的行为与它们的存储方式/位置完全无关。毕竟,语义不会因它们是存储在堆栈还是堆上而改变,是吗?事实上,指针类型不是对象-请看,可空类型是结构(根据COOP),不能从任何东西继承。从技术上讲,它们是这样的。请看@RCIX:我没有这么说。引用-“…因此继承自System.ValueType和System.Object”