所有对象都有默认值吗?

时间:2010-07-29 14:28:09

标签: c# object default

所有对象都有默认值吗?

实施例

Guid guid = default(Guid);

给出; 00000000-0000-0000-0000-000000000000

DateTime dt = default(DateTime);

给出; 01/01/0001 00:00:00

对于所有对象都是如此,所有对象都会将某些值作为默认值吗?我是对的,假设是......?

5 个答案:

答案 0 :(得分:12)

  

所有对象都有默认值吗?

绝对不是。例如,字符串“abc”是一个对象,但它没有“默认值”。数字12是一个对象,但它没有“默认值”。

但是,所有类型都有默认值。请记住,对象是类型的实例;对象存在于运行时。类型是编译时的概念。 不要将类型与对象混淆;它们与“纽约时报”字符串和今天纽约时报的实际副本不同。

可能存储在 reference 类型变量中的值是对象的引用 null 。因此,名称“引用类型”:引用类型的变量值是引用(或null)。

可能存储在 value 类型变量中的值是 objects ,它们是该类型的。因此,名称“值类型” - 值类型变量的值是

(我省略了讨论中的指针类型;为了我们的目的,假设所有指针类型在逻辑上与值类型IntPtr相同。)

任何引用类型的默认值都是空引用值。

任何数值类型的默认值 - int,decimal等 - 是该类型的零。 (支持多个零表示的类型,如float,选择正零。)bool的默认值为false。任何可空值类型的默认值是该值类型的空值。

任何其他值类型的默认值以递归方式定义为通过将类型的所有字段设置为默认值而形成的该类型的值。

这是清楚的吗?

答案 1 :(得分:5)

  

“返回null以供参考   类型和数字值为零   类型“。

http://msdn.microsoft.com/en-us/library/xwth0h0d%28v=VS.80%29.aspx

可能会帮助解释一下。

答案 2 :(得分:1)

是。值类型将具有定义的默认值。数值默认为0,布尔值默认为false。有关详细信息,请参见此处 http://msdn.microsoft.com/en-us/library/83fhsxwc.aspx

引用类型将默认为null。

答案 3 :(得分:0)

引用类型的default为空。

答案 4 :(得分:0)

是。引用类型默认为null,值类型 - 就像你提到的那样 - 默认为特定值等于零。