C#:可以为nullable类型(int?)对象?

时间:2009-12-04 22:51:11

标签: c# object nullable

我从this post了解到C#中的值类型不是对象。也就是说,它们不会从System.Object继承。

假设我的逻辑到目前为止,是可以为空的类型,例如int ?,对象。他们是否从Object继承?

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

正如引用一样,这个问题来自对null coalesce运算符的工作的调查。

3 个答案:

答案 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)

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