18

为什么无参数的 Guid 构造函数会生成一个空的 GUID,而不是像 Guid.NewGuid() 那样默认生成一个?

空的 Guid 有什么特殊用途吗?

4

4 回答 4

34

为什么无参数的 Guid 构造函数会生成一个空的 GUID,而不是像 Guid.NewGuid() 那样默认生成一个?

简短回答:因为语言/运行时没有让 Guid 类型的设计者定义默认构造函数。

“默认构造”结构的值为零不仅是惯例,而且您根本无法为结构定义默认构造函数。当您说 new Guid() 时,运行时会为您提供一个新对象,其中所有字段都初始化为其默认值:http: //msdn.microsoft.com/en-us/library/ah19swz4%28VS.71%29.aspx

一些基本原理可以在这里找到:https://web.archive.org/web/20131102220804/http: //www.yoda.arachsys.com/csharp/faq/#struct.constructors

于 2008-12-30T19:57:34.297 回答
3

此行为与 .Net 框架中的其余值类型一致。当“更新”一个值类型时,使用一个默认值。这恰好是 Guid 的默认值,类似于 Int32 的默认值 0。

于 2008-12-30T20:43:32.893 回答
2

空的 guid 可用于表示缺少 Guid。由于值类型不可为空(默认情况下是的,您可以使用可为空的)。

例如,我经常使用 Guid 作为 Id 属性,因为它们非常易于使用。因此,一种查看对象是否已被持久化的方法(即当它获取其 Id 时),我可以根据空 guid 检查 id 的值。

于 2008-12-30T19:28:11.407 回答
2

我认为传统的结构或内置类型的默认值为零。

于 2008-12-30T19:32:25.970 回答