Подтвердить что ты не робот

Необязательное значение параметра optionAttribute?

MSDN VS2010 Именованные и необязательные аргументы (Руководство по программированию на С#) рассказывает нам о дополнительных параметрах на С#, показывая код, как я ожидал:/p >

public void ExampleMethod(int required, 
    string optionalstr = "default string", 
    int optionalint = 10)

Хорошо, но он также говорит:

Вы также можете объявить необязательным параметров с помощью .NET. Необязательный атрибут класса. Необязательные параметры атрибута не требуется значение по умолчанию.

Я прочитал страницу дополнительных атрибутов MSDN и выполнил поиск в Интернете (что показывает, что многие люди утверждают, что параметры OptionalAttribute не могут быть использованы С# Я предполагаю, что эти комментарии были сделаны до С# 4?), Но я не могу найти ответ на два вопроса:

Если я использую OptionAttribute для определения параметра С# как необязательного:

  • какое значение будет использовано, если я вызову этот метод и не укажу это значение параметра?
  • будет ли это значение оцениваться во время компиляции или времени выполнения?
4b9b3361

Ответ 1

Правила таковы:

Обратите внимание, что в случае всего, кроме параметров типа object, это эквивалентно default(T).

Я был немного удивлен, поскольку спецификация С# 4.0 не указывала, каков будет результат, и я ожидал бы этого быть там.

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