我从this post了解到C#中的值类型不是对象。也就是说,它们不会从System.Object继承。
假设我的逻辑到目前为止,是可以为空的类型,例如int ?,对象。他们是否从Object继承?
如果是这样,它们是否受到与其他对象相同的规则和约束,或者是否存在管理其行为的特殊规则?
正如引用一样,这个问题来自对null coalesce运算符的工作的调查。
答案 0 :(得分:11)
不正确 - 值类型是对象,但它们的行为与引用类型不同 - 它们是按值传递,而不是按引用传递。因此,Nullable<T>
(这是T?
是)是一个结构,因此继承自System.ValueType和System.Object。 C#编译器中有Magic,它使可空类型的行为与引用类型相同,与null和??有关,但它们总是具有按值复制的语义。
答案 1 :(得分:1)
您是在询问“继承System.Object”还是“引用类型”?
值类型确实从System.Object继承,但它们不是引用类型。
Nullable类型也是值类型,因此它们也不是引用类型,但它们继承自System.Object。
请注意,程序员可以声明的内容与系统提供的内容存在差异。
值类型执行继承自System.Object,但您不能自己声明值类型以从任何内容继承。
值类型来自System.ValueType,而System.ValueType又来自System.Object。
从技术上讲,所有值类型都来自System.Object。
答案 2 :(得分:0)
一切都是一个对象,值类型只是结构而不是类。