Ответ 1
Правила таковы:
- Для параметров типа
object
,Type.Missing
передано. - Для других ссылочных типов передается
null
. - Для типов значений передается значение по умолчанию типа значения.
- Для
Nullable<T>
это означает, что вы получите экземплярNullable<T>
, который равенnull
(HasValue
свойство вернетfalse
)
- Для
Обратите внимание, что в случае всего, кроме параметров типа object
, это эквивалентно default(T)
.
Я был немного удивлен, поскольку спецификация С# 4.0 не указывала, каков будет результат, и я ожидал бы этого быть там.
Также (как указанный Скоттом Риппи в комментариях), это оценивается во время компиляции, это не операция времени выполнения, а это означает, что если вы имеют вызовы этого метода в других сборках, которые уже развернуты, и вы изменяете необязательное значение, значение по умолчанию, переданное методу, не изменится, если вы не скомпилируете все, что делает вызов против метода в сборке.