Почему конструктор Guid без параметров генерирует пустой GUID?

Почему конструктор Guid без параметров генерирует пустой GUID, а не сгенерированный по умолчанию, как в случае с Guid.NewGuid()?

Есть ли конкретное применение пустому Guid?


person Ryan Taylor    schedule 30.12.2008    source источник


Ответы (4)


Почему конструктор 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

person Community    schedule 30.12.2008
comment
Хе-хе, угадайте, кто является автором часто задаваемых вопросов по C# на www.yoda.arachsys.com? Маленькая подсказка: начинается с J и заканчивается на Skeet. - person splattne; 21.01.2009
comment
Я не удивлен, Джон действительно все знает ;-). - person ; 21.01.2009

Такое поведение согласуется с остальными типами значений в платформе .Net. При «обновлении» типа значения используется значение по умолчанию. Это просто значение по умолчанию для Guid, аналогичное значению Int32 по умолчанию, равному 0.

person Jason Jackson    schedule 30.12.2008

Пустой guid полезен для обозначения отсутствия guid. Поскольку типы значений не допускают значение NULL (по умолчанию да, вы можете использовать значение NULL).

Например, я часто использую свойства Guid as Id, потому что с ними действительно легко работать. Таким образом, один из способов узнать, был ли объект сохранен (что происходит, когда он получает свой идентификатор), я могу проверить значение идентификатора по пустому guid.

person JoshBerke    schedule 30.12.2008

Я думаю, общепринято, что значение по умолчанию для структуры или встроенного типа равно нулю.

person ChrisW    schedule 30.12.2008