Урок 8. Использование именованных и опциональных параметров

Представьте ситуации, когда нам для удобства нужно при вызова метода указывать только определённым параметрам значения, а другие параметры должны принимать значения по умолчанию. При этом мы ещё не изучали именованные и опциональные параметры. В таком случае нам нужно будет создавать различные перегрузки того же метода, который внутри себя будет вызывать оригинальный метод передавая ему полученные значения, а незаполненным устанавливать значения по умолчанию, как это приведено ниже:

static void Operation()                                         // 1-я перегрузка.
{
    Operation("val", 10, 12.2);
}

static void Operation(string value1)                            // 2-я перегрузка.
{
    Operation(value1, 10, 12.2);
}

static void Operation(string value1, int value2)                // 3-я перегрузка.
{
    Operation(value1, value2, 12.2);
}

static void Operation(string value1, int value2, double value3) // 4-я перегрузка.
{
    Console.WriteLine("{0},{1},{2}", value1, value2, value3);
}

static void Main()
{
    Operation();                  // 1-я перегрузка.
    Operation("val");             // 2-я перегрузка.
    Operation("val", 10);         // 3-я перегрузка. 
    Operation("val", 10, 12.2);   // 4-я перегрузка.
    
    // Delay.
    Console.ReadKey();
}

В таком случае количество кода увеличивается и количество требуемой памяти для хранения его в ОЗУ также увеличивается, что не есть хорошо, ведь этого можно запросто избе,жать используя опциональные параметры, например:

// Метод вызывается так же, если бы это были перегрузки.
static void Operation(string value1 = "val", int value2 = 10, double value3 = 12.2)
{
    Console.WriteLine("{0}, {1}, {2}", value1, value2, value3);
}

Теперь нам ненужно писать дополнительные перегрузки этого метода, а при необходимости передачи определённым параметрам значения мы можем сделать это используя позиционные и именованные параметры, например:

Operation();                  // 1-я перегрузка.
Operation("val");             // 2-я перегрузка.
Operation("val", 10);         // 3-я перегрузка. 
Operation("val", 10, 12.2);   // 4-я перегрузка.

// Нельзя поставить третий параметр value3 = 12.2, вместо второго параметра value2 = 10!
// 12.2 не может быть приведено к int — здесь C# пытается оставить по умолчанию третий параметр, а не второй.
//Operation("val", 12.2); // ОШИБКА!

// В данном случае возможно использование именованных параметров.
// Они состоят из указания имени параметра, двоеточия и значения, которое мы передаем.

Operation("val", value3: 12.2);
Operation(value2: 33, value3: 12.2);

Источник: видеоурок Александра Шевчука "МЕТОДЫ. РЕКУРСИЯ"

%D1%81%D1%82%D1%80%D0%B5%D0%BB%D0%BA%D0%B0%20%D0%B2%D0%BB%D0%B5%D0%B2%D0%BE%202 предыдущая статья | следующая статья %D1%81%D1%82%D1%80%D0%B5%D0%BB%D0%BA%D0%B0%20%D0%B2%D0%BF%D1%80%D0%B0%D0%B2%D0%BE%202