Необязательные аргументы

static void OptArgMeth(int alpha, int beta=10, int gamma = 20) {

В этой строке кода объявляются два необязательных параметра: beta и gamma

Принимая во внимание приведенное выше объявление метода OptArgMeth(),

последний можно вызвать следующими способами.

// Передать все аргументы явным образом.

OptArgMeth(1, 2, 3);

// Сделать аргумент gamma необязательным.

OptArgMeth(1, 2);

// Сделать оба аргумента beta и gamma необязательными.

OptArgMeth(1);

При первом вызове параметру alpha передается значение 1, параметру beta —значение 2, а параметру gamma — значение 3…

Следует, однако, иметь в виду, что параметр beta не получит устанавливаемое по умолчанию значение, если то же самое не произойдет с параметром gamma. Если первый аргумент устанавливается по умолчанию, то и все остальные аргументы должны быть установлены по умолчанию.

//продемонтрировать необязательные аргументы

using System;

class OptionArgDemo

{

static void OptArgMeth(int alpha, int beta = 10, int gamma = 20)

{

Console.WriteLine("Это аргументы alpha, beta и gamma: "+alpha+" "+beta + " " + gamma);

}

static void Main()

{

//передать все аргументы явным образом.

OptArgMeth(1, 2, 3);

//сделать аргумент gamma необьязательным

OptArgMeth(1, 2);

//сделать оба аргумента beta и gamma необьязательными

OptArgMeth(1);

}}

Следует иметь в виду, что все необязательные аргументы должны непременно указываться справа от обязательных. Например, следующее объявление оказывается недействительным.

int Sample(string name = "пользователь", int userid) { // Ошибка!

int Sample(int accountId, string name = "пользователь", int userId) { // Ошибка!

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

Необязательные аргументы и перегрузка методов

В некоторых случаях необязательные аргументы могут стать альтернативой перегрузке методов. Для того чтобы стало понятнее, почему это возможно, обратимся еще раз к примеру метода OptArgMeth(). До появления в C# необязательных аргументов нам пришлось бы создать три разных варианта метода OptArgMeth(), чтобы добиться таких же функциональных возможностей, как и у рассмотренного выше варианта этого метода. Все эти варианты пришлось бы объявить следующим образом.

static void OptArgMeth(int alpha)

static void OptArgMeth(int alpha, int beta)

static void OptArgMeth(int alpha, int beta, int gamma)