Также есть способ использовать значения времени выполнения для необязательных параметров метода?
Почему для необязательных параметров в С# 4.0 требуются константы времени компиляции?
Ответ 1
Необязательные параметры должны быть константами, поскольку они записываются как значения атрибута. Следовательно, они наследуют все ограничения, которые имеет значение атрибута.
Невозможно напрямую кодировать значение времени выполнения. Однако вы можете приблизиться к следующему шаблону
public void MyApi(SomeType type = null) {
type = type ?? new SomeType();
...
}
Ответ 2
Дополнительные параметры компилируются в сборку и как таковые (как и все, что обозначено как const
), они должны быть константой времени компиляции.
И нет, вы не можете использовать значения времени выполнения в качестве необязательных параметров.
Ответ 3
Дополнительные параметры определяются во время компиляции и заменяются на метод, если вы вызываете метод с слишком небольшим количеством параметров. Они обрабатываются путем добавления атрибута к параметру в методе IL.
Таким образом, они должны быть полностью разрешены во время компиляции (как для создания, так и для атрибута, но также и при использовании). Невозможно использовать значения времени выполнения для необязательных параметров метода.