Именованные аргументы

Как вам должно быть уже известно, при передаче аргументов методу порядок их следования, как правило, должен совпадать с тем порядком, в котором параметры определены в самом методе. Иными словами, значение аргумента присваивается параметру по его позиции в списке аргументов. Данное ограничение призваны преодолеть именованные аргументы. Именованный аргумент позволяет указать имя того параметра, которому присваивается его значение. И в этом случае порядок следования аргументов уже не имеет никакого значения.

Для указания аргумента по имени служит следующая форма синтаксиса

имя_параметра : значение

Здесь имя_параметра обозначает имя того параметра, которому передается значение.

В этом примере создается метод 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);

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