Поиск…


замечания

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

Ссылка: аргументы с именами MSDN позволяют указать аргумент для определенного параметра, связав аргумент с именем параметра, а не с позицией параметра в списке параметров.

Как сказано в MSDN, именованный аргумент,

  • Позволяет передавать аргумент функции, связывая имя параметра.
  • Не нужно помнить о позиции параметров, о которых мы не знаем всегда.
  • Не нужно искать порядок параметров в списке параметров вызываемой функции.
  • Мы можем указать параметр для каждого аргумента по его имени.

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

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

Как сказано в MSDN, необязательный аргумент,

  • Мы можем опустить аргумент в вызове, если этот аргумент является необязательным аргументом
  • Каждое необязательное аргумент имеет собственное значение по умолчанию
  • Он будет принимать значение по умолчанию, если мы не предоставим значение
  • Значение по умолчанию необязательного аргумента должно быть
    • Постоянное выражение.
    • Должен быть тип значения, например enum или struct.
    • Должно быть выражение формы default (valueType)
  • Он должен быть установлен в конце списка параметров

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

Рассмотрим следующий вызов функции.

FindArea(120, 56);

В этом наш первый аргумент - длина (т.е. 120), а второй аргумент - ширина (т.е. 56). И мы вычисляем область этой функцией. Следующее - определение функции.

private static double FindArea(int length, int width)
       {
           try
           {
               return (length* width);
           }
           catch (Exception)
           {
               throw new NotImplementedException();
           }
       }

Поэтому в первом вызове функции мы просто передали аргументы по своей позиции. Правильно?

double area;
Console.WriteLine("Area with positioned argument is: ");
area = FindArea(120, 56);
Console.WriteLine(area);
Console.Read();

Если вы запустите это, вы получите результат следующим образом.

введите описание изображения здесь

Теперь здесь появляются функции именованных аргументов. См. Предыдущий вызов функции.

Console.WriteLine("Area with Named argument is: ");
area = FindArea(length: 120, width: 56);
Console.WriteLine(area);
Console.Read();

Здесь мы приводим именованные аргументы в вызове метода.

area = FindArea(length: 120, width: 56);

Теперь, если вы запустите эту программу, вы получите тот же результат. Мы можем указать имена в обратном вызове метода, если мы используем именованные аргументы.

Console.WriteLine("Area with Named argument vice versa is: ");
area = FindArea(width: 120, length: 56);
Console.WriteLine(area);
Console.Read();

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

Вы также можете указать позиционные аргументы. Это означает сочетание как позиционного аргумента, так и именованного аргумента.

Console.WriteLine("Area with Named argument Positional Argument : ");
            area = FindArea(120, width: 56);
            Console.WriteLine(area);
            Console.Read();

В приведенном выше примере мы передали 120 как длину и 56 в качестве именованного аргумента для ширины параметра.

Есть и некоторые ограничения. Теперь мы обсудим ограничение именных аргументов.

Ограничение использования именованного аргумента

Именованная спецификация аргумента должна появиться после указания всех фиксированных аргументов.

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

введите описание изображения здесь

Именованная спецификация аргумента должна появляться после указания всех фиксированных аргументов

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

Рассмотрим предыдущее - это определение функции с необязательными аргументами.

private static double FindAreaWithOptional(int length, int width=56)
       {
           try
           {
               return (length * width);
           }
           catch (Exception)
           {
               throw new NotImplementedException();
           }
       }

Здесь мы установили значение ширины как необязательное и дали значение 56. Если вы заметили, что IntelliSense сам показывает необязательный аргумент, как показано на рисунке ниже.

введите описание изображения здесь

Console.WriteLine("Area with Optional Argument : ");
area = FindAreaWithOptional(120);
Console.WriteLine(area);
Console.Read();

Обратите внимание, что во время компиляции мы не получили никакой ошибки, и вы получите результат следующим образом.

введите описание изображения здесь

Использование дополнительного атрибута.

Другим способом реализации необязательного аргумента является использование ключевого слова [Optional] . Если вы не передадите значение для необязательного аргумента, этому аргументу присваивается значение по умолчанию этого типа данных. Ключевое слово Optional присутствует в пространстве имен Runtime.InteropServices.

using System.Runtime.InteropServices;  
private static double FindAreaWithOptional(int length, [Optional]int width)
   {
       try
       {
           return (length * width);
       }
       catch (Exception)
       {
           throw new NotImplementedException();
       }
   } 

area = FindAreaWithOptional(120);  //area=0

И когда мы вызываем функцию, мы получаем 0, потому что второй аргумент не передается, а значение по умолчанию для int равно 0, и поэтому произведение равно 0.



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow