OptArgMeth(1);
При первом вызове параметруalphaпередается значение 1, параметруbeta —значение 2, а параметруgamma— значение 3. Таким образом, все три аргумента задаются явным образом, а значения, устанавливаемые по умолчанию, не используются. При втором вызове параметруalphaпередается значение 1, а параметруbeta— значение 2, но параметруgammaприсваивается устанавливаемое по умолчанию значение 20. И наконец, при третьем вызове упомянутого выше метода параметруalphaпередается значение 1, а параметрамbetaиgammaприсваиваются устанавливаемые по умолчанию значения. Следует, однако, иметь в виду, что параметр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);
OptArgMeth(1, 2);
// Сделать оба аргумента beta и gamma необязательными.
OptArgMeth(1);
}
}
Результат выполнения данной программы лишь подтверждает применение используемых по умолчанию аргументов.
Это аргументы alpha, beta и gamma: 12 3
Это аргументы alpha, beta и gamma: 1 2 20
Это аргументы alpha, beta и gamma: 1 10 20
Как следует из приведенного выше результата, если аргумент не указан, то исполь
зуется его значение, устанавливаемое по умолчанию.
Следует иметь в виду, что все необязательные аргументы должны непременно указываться
int Sample(string name = "пользователь", int userid) { // Ошибка!
Для исправления ошибки в этом объявлении необходимо указать аргументuseridдо аргументаname.Раз уж вы начали объявлять необязательные аргументы, то указывать после них обязательные аргументы нельзя. Например, следующее объявление также оказывается неверным.
int Sample(int accountld, string name =• "пользователь", int userid) { //.Ошибка!
Аргументnameобъявляется как необязательный, и поэтому аргументuseridследует указать до аргументаname(или же сделать его также необязательным).