Методы в C#. Параметры методов - C# и .NET

Методы в C#. Параметры методов

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

Параметры методов в 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) и мы получаем ошибку:

Аргумент 2: не удается преобразовать из “double” в “int”.

Именованные параметры методов

Параметры методов 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.