Параметры метода си шарп

Параметры метода си шарп

В прошлой теме был определен метод SayHello , который выводит на консоль некоторое сообщение:

void SayHello() < Console.WriteLine("Hello"); >SayHello(); // Hello

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

Параметры позволяют передать в метод некоторые входные данные. Параметры определяются через заятую в скобках после названия метода в виде:

тип_метода имя_метода (тип_параметра1 параметр1, тип_параметра2 параметр2, . ) < // действия метода >

Определение параметра состоит из двух частей: сначала идет тип параметра и затем его имя.

Например, определим метод PrintMessage, который получает извне выводимое сообщение:

void PrintMessage(string message) < Console.WriteLine(message); >PrintMessage("Hello work"); // Hello work PrintMessage("Hello METANIT.COM"); // Hello METANIT.COM PrintMessage("Hello C#"); // Hello C#

Здесь метод PrintMessage() принимает один параметр, который называется message и имеет тип string .

Чтобы выполнить метод, который имеет параметры, при вызове после имени метода в скобках ему передаются значения для его параметров, например:

Здесь параметру message передается строка «Hello work». Значения, которые передаются параметрам, еще называются аргументами . То есть передаваемая строка «Hello work» в данном случае является аргументом.

Иногда можно встретить такие определения как формальные параметры и фактические параметры . Формальные параметры — это собственно параметры метода (в данном случае message), а фактические параметры — значения, которые передаются формальным параметрам. То есть фактические параметры — это и есть аргументы метода.

Определим еще один метод, который складывает два числа:

void Sum(int x, int y) < int result = x + y; Console.WriteLine($"+ = "); > Sum(10, 15); // 10 + 15 = 25

Метод Sum имеет два параметра: x и y. Оба параметра представляют тип int. Поэтому при вызове данного метода нам обязательно надо передать на место этих параметров два числа. Внутри метода вычисляется сумма переданных чисел и выводится на консоль.

При вызове метода Sum значения передаются параметрам по позиции. Например, в вызове Sum(10, 15) число 10 передается параметру x, а число 15 — параметру y.

Также параметры могут использоваться в сокращеной версии метода:

void Sum(int x, int y) => Console.WriteLine($" + = < x + y >"); Sum(10, 15); // 10 + 15 = 25

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

void Sum(int x, int y) => Console.WriteLine($" + = < x + y >"); int a = 10, b = 15, c = 6; Sum(a, b); // 10 + 15 = 25 Sum(3, c); // 3 + 6 = 9 Sum(14, 4 + c); // 14 + 10 = 24

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

void Sum(int x, int y) < Console.WriteLine($"+ = < x + y >"); > int a; int b = 15; Sum(a, b); // ! Ошибка

Соответствие параметов и аргументов по типу данных

При передаче значений параметрам важно учитывать тип параметров: между аргументами и параметрами должно быть соответствие по типу. Например:

void PrintPerson(string name, int age) < Console.WriteLine($"Name: Age: "); > PrintPerson("Tom", 24); // Name: Tom Age: 24

В данном случае первый параметр метода PrintPerson() представляет тип string , поэтому при вызове метода мы должны передать этому параметру значение типа string , то есть строку. Второй параметр представляет тип int , поэтому должны передать ему целое число, которое соответствует типу int .

Также мы можем передать параметрам значения тех типов, которые автоматически могут быть преобразованы в тип параметров. Например:

void PrintPerson(string name, int age) < Console.WriteLine($"Name: Age: "); > byte b = 37; PrintPerson("Tom", b); // Name: Tom Age: 37

Здесь параметру типа int передается значение типа byte , но комилятор может автоматически преобразовать значение типа byte к тиу int. Поэтому здесь ошибки не возникнет. Какие преобразования типов могут быть выполнены автоматически, рассматривалось в одной из предыдущих тем: Преобразования базовых типов данных

Данные других типов мы передать параметров не можем. Например, следующий вызов метода PrintPerson будет ошибочным:

PrintPerson(45, "Bob"); // Ошибка! несоответствие значений типам параметров

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

По умолчанию при вызове метода необходимо предоставить значения для всех его параметров. Но C# также позволяет использовать необязательные параметры. Для таких параметров нам необходимо объявить значение по умолчанию. Также следует учитывать, что после необязательных параметров все последующие параметры также должны быть необязательными:

void PrintPerson(string name, int age = 1, string company = "Undefined") < Console.WriteLine($"Name: Age: Company: "); >

Здесь параметры age и company являются необязательными, так как им присвоены значения. Поэтому при вызове метода мы можем не передавать для них данные:

void PrintPerson(string name, int age = 1, string company = "Undefined") < Console.WriteLine($"Name: Age: Company: "); > PrintPerson("Tom", 37, "Microsoft"); // Name: Tom Age: 37 Company: Microsoft PrintPerson("Tom", 37); // Name: Tom Age: 37 Company: Undefined PrintPerson("Tom"); // Name: Tom Age: 1 Company: Undefined

Консольный вывод программы:

Name: Tom Age: 37 Company: Microsoft Name: Tom Age: 37 Company: Undefined Name: Tom Age: 1 Company: Undefined

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

В предыдущих примерах при вызове методов значения для параметров передавались в порядке объявления этих параметров в методе. То есть аргументы передавались параметрам по позиции . Но мы можем нарушить подобный порядок, используя именованные параметры:

void PrintPerson(string name, int age = 1, string company = "Undefined") < Console.WriteLine($"Name: Age: Company: "); > PrintPerson("Tom", company:"Microsoft", age: 37); // Name: Tom Age: 37 Company: Microsoft PrintPerson(age:41, name: "Bob"); // Name: Bob Age: 41 Company: Undefined PrintPerson(company:"Google", name:"Sam"); // Name: Sam Age: 1 Company: Google

Для передачи значений параметрам о имени при вызове метода указывается имя параметра и через двоеточие его значение: name:»Tom»

Консольный вывод программы:

Name: Tom Age: 37 Company: Microsoft Name: Bob Age: 41 Company: Undefined Name: Sam Age: 1 Company: Google

Источник

Читайте также:  Html rel alternate это
Оцените статью