2010-07-29 4 views
1

У всех объектов есть значение по умолчанию?У всех объектов есть значение по умолчанию?

Пример;

Guid guid = default(Guid);

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

DateTime dt = default(DateTime);

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

Действительно ли это для всех объектов, все объекты дают значение по умолчанию? Я вправе предположить, что да ...?

+0

Почему вы спрашиваете? Что «да!» (Или «нет!») Изменится для вашего кода? – pascal

+0

Это значение по умолчанию не является значением по умолчанию;) –

ответ

12

У всех объектов есть значение по умолчанию?

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

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

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

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

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

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

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

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

Это ясно?

+0

«Значение по умолчанию любого другого типа значения ...» Я заметил, что вы сказали «любой другой тип значения» вместо того, чтобы говорить «a struct». Есть ли другой тип значения, кроме «struct»? – Brian

+0

@Brian: Нет. Я мог бы сказать «struct», но это было бы не параллельно со структурой других предложений в списке. –

0

default для ссылочных типов - null.

+0

Почему downvote? –

0

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

5

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

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

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

+0

Из любопытства: Как получилось 'default (DateTime)' is '01/01/0001 00: 00: 00', а не' 00/00/0000 00: 00: 00'? – sunside

+1

@Markus: Потому что не было нулевого года, нет ни одного месяца и нет ни одного дня в месяце! Что бы 0/0/0000 даже * означало *? (Кстати, в JavaScript, если вы запрашиваете «день 0» месяца, вы получаете последний день предыдущего месяца. Это сбивает с толку и странно, и запрос на нулевой день месяца должен быть * ошибкой *.) –

+0

@ Эрик Спасибо, капитан Очевидный. : D * scnr * Мой вопрос в том, почему 'default()' дает этот результат, так как он [возвращает] ноль для числовых значений типов. – sunside

1

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

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

+0

почему -1? Ссылка указывает соответствующее значение по умолчанию для другого типа для C# в соответствии с заданным вопросом. Пожалуйста, просветите –

Смежные вопросы