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