null还能在C#中继承Object吗?

时间:2009-02-20 19:25:50

标签: c# .net

null是否也在C#中继承了Object?

null本身定义在哪里?

6 个答案:

答案 0 :(得分:10)

  

null是否也在C#中继承了Object?

与其他一些系统不同,null不是根据类或实例定义的。相反,它表示任何实例的缺席,并且它没有类型。它被隐式转换为适合上下文的任何引用类型。最宽的转换(即无法推断其他转换时)是object。但是,null通常不是object类型。

答案 1 :(得分:6)

null不是对象 - 它是一个语言关键字,表示缺少对象引用。

答案 2 :(得分:3)

  

null本身定义在哪里?

null是一个关键字。 null不是一种类型。

有两种变量,每种变量都有自己的一系列可空性规则。

参考类型变量

输入变量,可以引用相同或不同类型的实例。

//The reference type is System.Object and
//  the instance type is System.String
object s = "123";

对于引用类型变量,null表示缺少实例。

//The reference type is System.Object and
//  there is no instance.
object x = null;

使用没有实例的引用类型变量将导致空引用异常。

string s = null;
s = s + "a"; //BOOM.

值类型变量

值类型变量具有单一类型,并且分配的值必须是此类型而不是其他类型。

int i = 3;

对于某些值类型变量(仅属于Nullable<T>类型的变量),可以指定null。这表明没有价值。

int? i = null;

使用没有值的值类型不会生成空引用异常 - 不涉及引用

int? i = null
if (i < 3) //false

答案 3 :(得分:2)

null是“null type”,它继承自object。

见ECMA-334 11.2.7

答案 4 :(得分:1)

我认为null本身不是一个对象。

答案 5 :(得分:0)

null不是类型,它是一个值。更具体地说,它是一个值,根据定义,它是值的绝对值。在C#中,null可以转换为任何引用类型。

因此null不从System.Object继承,但它是一个可转换为不从System.ValueType继承的任何对象的值。