【发布时间】:2010-09-28 21:48:38
【问题描述】:
为什么无参数的 Guid 构造函数会生成一个空的 GUID,而不是像 Guid.NewGuid() 那样默认生成一个?
空的 Guid 有什么特殊用途吗?
【问题讨论】:
标签: c# .net guid default-constructor
为什么无参数的 Guid 构造函数会生成一个空的 GUID,而不是像 Guid.NewGuid() 那样默认生成一个?
空的 Guid 有什么特殊用途吗?
【问题讨论】:
标签: c# .net guid default-constructor
为什么无参数的 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
【讨论】:
此行为与 .Net 框架中的其余值类型一致。当“更新”一个值类型时,使用一个默认值。这恰好是 Guid 的默认值,类似于 Int32 的默认值 0。
【讨论】:
空的 guid 可用于表示缺少 Guid。由于值类型不可为空(默认情况下是的,您可以使用可为空的)。
例如,我经常使用 Guid 作为 Id 属性,因为它们非常易于使用。因此,一种查看对象是否已持久化的方法(即当它获取其 Id 时),我可以根据空 guid 检查 id 的值。
【讨论】:
我认为结构或内置类型的默认值为零是惯例。
【讨论】: