Именованные параметры очень тесно связаны со значениями по умолчанию для параметров (необязательно), таких как:
void Foo(int i = 10)
И это очень хорошо для нескольких целей, как уже описаны другие ответы.
По моему мнению (и я полагаю, именно поэтому нам приходилось полагаться на перегруженные конструкторы до сих пор), нужно срезать углы. Во многих случаях некоторые конструкторы могут быть более эффективными, если указывается только подмножество другого конструктора. Пример:
//Without optional parameters
public MyObj()
{
this.result = 3628800; //Factorial 10 - pretty fast
}
public MyObj(int n)
{
this.result = factorial(n);
}
//With optional parameters but same results for any number of n
public MyObj(int n = 10)
{
this.result = factorial(n); //A lot slower when we just need the result for 10
}
//Usage
new MyObj(); //Fast with constructor overloading - slower with optional parameters
Это глупый пример, но идея очень важна. Я знаю, что Андерс Х. (соавтор C #) использовал это в качестве аргумента, чтобы не вводить необязательные параметры. Но я думаю, что большинство программистов будут использовать соответствующий метод, когда в проекте подчеркивается производительность, удобочитаемость и т. Д.)
Следует также отметить, что более новый инициализатор ...
var foo = new Foo(...)
{
SomeProperty1 = something,
SomeProperty2 = something
}
... во многих случаях может быть хорошей альтернативой именованному стилю параметра.