Именованные аргументы
Как вам должно быть уже известно, при передаче аргументов методу порядок их следования, как правило, должен совпадать с тем порядком, в котором параметры определены в самом методе. Иными словами, значение аргумента присваивается параметру по его позиции в списке аргументов. Данное ограничение призваны преодолеть именованные аргументы. Именованный аргумент позволяет указать имя того параметра, которому присваивается его значение. И в этом случае порядок следования аргументов уже не имеет никакого значения.
Для указания аргумента по имени служит следующая форма синтаксиса
имя_параметра : значение
Здесь имя_параметра обозначает имя того параметра, которому передается значение.
В этом примере создается метод IsFactor(), возвращающий логическое
значение true, если первый его параметр нацело делится на второй параметр.
//применить именованные аргументы.
using System;
class namedArgsDemo
{
//выяснить, делится ли однао значение нацело на другое.
static bool IsFactor(int val, int divisor)
{
if ((val % divisor) == 0) return true;
return false;
}
static void Main()
{
//ниже демонстрируются разные способы вызова метода IsFactor().
//вызов с исполнением позиционных аргументов.
if (IsFactor(10, 2)) Console.WriteLine("2 - множитель 10.");
//вызов с использованием именованных аргументов.
if (IsFactor(val: 10, divisor: 2)) Console.WriteLine("2 - множетиль 10.");
//для именованного аргумента порядок указания не имеет значения.
if (IsFactor(divisor: 2, val: 10)) Console.WriteLine("2 - множитель 10.");
//применить как позиционный, так и именованный аргумент.
if (IsFactor(10, divisor: 2)) Console.WriteLine("2 - множитель 10.");
}
}
Следует, однако, иметь в виду, что при совместном использовании именованных и позиционных аргументов все позиционные аргументы должны быть указаны перед любыми именованными аргументами.
Именованные аргументы можно также применять вместе с необязательными аргументами. Покажем это на примере вызова метода Display(), рассматривавшегося в предыдущем разделе.
// Указать все аргументы по имени.
Display(stop: 10, str: "это простой тест", start: 0);
// Сделать аргумент start устанавливаемым по умолчанию.
Display(stop: 10, str: "это простой тест");
// Указать строку по позиции, аргумент stop — по имени by name,
// тогда как аргумент start — устанавливаемым по умолчанию
Display("это простой тест", stop: 10);
Синтаксис именованных аргументов более многословен, чем у обычных позиционных аргументов, и поэтому для вызова методов чаще всего применяются позиционные аргументы. Но в тех случаях, когда это уместно, именованные аргументы могут быть использованы довольно эффективно