Именованные параметры очень сильно связаны со значениями по умолчанию для параметров (опция), таких как:
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
}
... может быть хорошей альтернативой названному стилю параметров во многих случаях.