Содержание
Параметры методов позволяют задать некоторые входные значения для метода. Мы уже использовали параметры методов, например, в домашней работе для задания числа и показателя степени. В этой части мы более детально разберемся с тем, как мы можем использовать параметры методов при разработке своих приложений на C#
Параметры методов в C#
В C# параметры методов могут быть формальными, фактическими, именованными. определяемыми по позиции и необязательными.

Формальные и фактические параметры, аргументы
В различных источниках информации мы можем встретить такие понятия, как формальный параметр, фактический параметр и аргумент. Вот, что на этот счёт говорит вики:
- Параметр — принятый методом аргумент
- Формальный параметр — аргумент, указываемый при объявлении или определении метода.
- Фактический параметр — аргумент, передаваемый в метод при его вызове;
Например, рассмотрим метод возведения числа в степень:
int Power(int num, int pow)
{
int result = 1;
for (int i = 0; i < pow; i++)
result *= num;
return result;
}
Для того, чтобы наш метод мог выполнить возложенную на него задачу, мы задаем для нашего метода два аргумента: int num, int pow– это, следуя общепринятой терминологии, формальные параметры. Мы их указываем в объявлении метода. Далее, мы используем этот метод, например, так:
int a = 10;
int b = 3;
int c = Power(a, b);
int Power(int num, int pow)
{
int result = 1;
for (int i = 0; i < pow; i++)
result *= num;
return result;
}
здесь переменные a и b, передаваемые в метод – это уже фактические методы. Именно значения этих переменных передаются в метод при его вызове. Обратите внимание, что имена формальных и фактических методов могут не совпадать, но обязательно должны совпадать их типы данных. Например, вот такой вызов метода Power()приведет к ошибке:
int a = 10; double b = 3; int c = Power(a, b);
Здесь тип формального параметра (int) не совпадает с типов фактического параметра (double) и мы получаем ошибку:
Именованные параметры методов
Параметры методов C# могут передаваться двумя способами – по позиции и по имени. Первый способ мы используем сейчас – все фактические параметры передаются в том же порядке, как расположены формальные параметры. Например, рассмотрим наш метод вывода цветного текста в консоль:
void PrintColorText(ConsoleColor color, string text)
{
ConsoleColor oldColor = Console.ForegroundColor;
Console.ForegroundColor = color;
Console.WriteLine(text);
Console.ForegroundColor = oldColor;
}
При использовании этого метода, мы передавали фактические параметры по позиции, например
PrintColorText(ConsoleColor.DarkBlue, "Привет, программист!\r\nКод этого приложения прекрасно работает");
Здесь параметр, определяющий цвет текста идет первым, так же, как и при определении метода, а сам текст – вторым. Однако, в практике, нам может потребоваться изменить порядок следования фактических параметров метода и для этого мы можем использовать именованные параметры.
Именованный параметр задается с использованием имени формального параметра, например, используя именованные параметры, мы могли бы вызвать метод PrintColorText() следующим образом:
PrintColorText(text: "Текст", color: ConsoleColor.DarkGreen);
Здесь мы используем именованные параметры и поменяли местами их расположение при вызове метода – теперь первым параметром выступает текст, а вторым – цвет текста.
Необязательные параметры метода C#
Необязательные параметры метода — это параметры, для которых при объявлении метода используются значения по умолчанию. Такие параметры могут не указываться при вызове метода. Например, по умолчанию, цвет текста в консоли – белый. Зачем нам использовать фактический параметр для указания белого цвета текста? Можно сделать этот параметр метода необязательным:
void PrintColorText(string text, ConsoleColor color = ConsoleColor.White)
{
ConsoleColor oldColor = Console.ForegroundColor;
Console.ForegroundColor = color;
Console.WriteLine(text);
Console.ForegroundColor = oldColor;
}
Обратите внимание: необязательные параметры в методах C# всегда указываются последними при объявлении метода. После имени формального параметра мы указали его значение по умолчанию:
ConsoleColor color = ConsoleColor.White
Теперь, чтобы вызвать наш метод и написать в консоли текст белым цветом, достаточно выполнить вот такой вызов:
PrintColorText("Текст");
Значение цвета текста будет принято по умолчанию – то, которое было указано в объявлении метода.
Метод может содержать сколько угодно необязательных параметров. И здесь необходимо помнить следующее правило:
Например, сделаем оба параметра метода необязательными:
void PrintColorText(string text = "Hello, World!", ConsoleColor color = ConsoleColor.White)
{
ConsoleColor oldColor = Console.ForegroundColor;
Console.ForegroundColor = color;
Console.WriteLine(text);
Console.ForegroundColor = oldColor;
}
Теперь мы можем вызывать наш метод вообще без указания фактических параметров:
PrintColorText();
но, при этом, не можем сделать вот такой вызов:
PrintColorText(ConsoleColor.Green);
Так как необязательный параметр textстоит слева от другого необязательного параметра color, то мы не можем его пропустить при указании параметров по позиции. Но, при этом, вполне можем воспользоваться именованным параметром и вызвать метод вот так:
PrintColorText(color: ConsoleColor.Green);
Так как мы используем именованный параметр, то компилятор C# поймет, что это параметр цвета и программа сработает как и предполагается – выведет в консоль строку “Hello, World!” красного цвета.
Подведем итог
Параметры методов в C# могут передаваться по позиции (в этом случае, фактические параметры при вызове метода указываются в той же последовательности, что и формальные) и по имени (в этом случае фактические параметры могут следовать в произвольном порядке при вызове метода), а также необязательными – фактические параметры в этом случае могут не указываться при вызове метода.
Домашнее задание №16
Разработайте метод вычисления объема куба. Длина, ширина и высота куба задаются последовательно в виде трех целых чисел. По умолчанию, высота куба принимается равной 1.