Все объекты имеют значение по умолчанию? - PullRequest
1 голос
/ 29 июля 2010

Все ли объекты имеют значение по умолчанию?

Пример;

Guid guid = default(Guid);

Дает;00000000-0000-0000-0000-000000000000

DateTime dt = default(DateTime);

Дает;01/01/0001 00: 00: 00

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

Ответы [ 5 ]

12 голосов
/ 29 июля 2010

Все ли объекты имеют значение по умолчанию?

Абсолютно нет. Например, строка «abc» является объектом, но не имеет «значения по умолчанию». Число 12 является объектом, но у него нет «значения по умолчанию».

Однако все типы имеют значение по умолчанию. Помните, что объекты являются экземплярами типов; объекты существуют во время выполнения. Типы - это концепция времени компиляции. Не путайте типы с объектами; они отличаются от строки "The New York Times" и фактической копии сегодняшней New York Times.

Значения, которые могут храниться в переменной типа reference , являются либо ссылками на объекты , либо null . Отсюда и название «ссылочный тип»: значение переменной типа reference является reference (или null).

Значения, которые могут храниться в переменной типа значение , представляют собой объекты , которые являются значениями этого типа. Отсюда и название «тип значения» - значение переменной типа значения является значением .

(я опускаю типы указателей в обсуждении; для наших целей предположим, что все типы указателей логически совпадают с типом значения IntPtr.)

Значением по умолчанию для любого ссылочного типа является нулевое ссылочное значение.

Значением по умолчанию для любого типа числовых значений - int, decimal и т. Д. - является ноль этого типа. (Типы, которые поддерживают множественные представления нуля, такие как float, выбирают положительный ноль.) Значение по умолчанию bool - false. Значением по умолчанию любого типа значения, допускающего значение NULL, является значение NULL этого типа значения.

Значение по умолчанию для любого другого типа значения рекурсивно определяется как значение этого типа, сформированное путем установки для всех полей типа их значений по умолчанию.

Это ясно?

5 голосов
/ 29 июля 2010

"вернуть ноль для ссылочных типов и ноль для числовых типов значений."

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

Может помочь объяснить немного больше.

1 голос
/ 29 июля 2010

Да.Типы значений будут иметь значения по умолчанию, как определено.Числовое значение по умолчанию равно 0, а логическое значение по умолчанию равно false.Подробнее см. Здесь http://msdn.microsoft.com/en-us/library/83fhsxwc.aspx

Тип ссылки по умолчанию будет нулевым.

0 голосов
/ 29 июля 2010

Да. Типы ссылок по умолчанию равны нулю, а типы значений - как и те, о которых вы упомянули - по умолчанию имеют конкретные значения, равные нулю.

0 голосов
/ 29 июля 2010

по умолчанию для ссылочных типов равно нулю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...