Файл: Методы. Способы передачи параметров. Преподаватель Кривошеина А. В.pptx
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 04.02.2024
Просмотров: 45
Скачиваний: 0
СОДЕРЖАНИЕ
Методы. Способы передачи параметров.
[ атрибуты ] [ спецификаторы ] тип имя ( [ параметры ] )
Примеры методов с возвращаемым значением:
Console.WriteLine(message); // Hello
static void SayHello() => Console.WriteLine("Hello");
Подобным образом мы можем сокращать и методы, которые возвращают значение
Console.WriteLine(result); // 60
Console.WriteLine(result); // 80
Console.WriteLine(result); // 90
//z использует значение по умолчанию
OptionalParam(y:2, x:3, s:10);
Передача параметров по ссылке и значению
Передача параметров по значению
Sum(10, 15); // параметры передаются по значению
Передача параметров по ссылке и модификатор ref
Addition(ref x, y); // вызов метода
// параметр x передается по ссылке
static void Addition(ref int x, int y)
Пример передачи параметра по значению
Console.WriteLine($"Переменная a после передачи по значению равна {a}");
static void IncrementVal(int x)
Console.WriteLine($"IncrementVal: {x}");
Пример передачи параметра по ссылке
static void Main(string[] args)
Console.WriteLine($"Переменная a после передачи ссылке равна = {a}");
static void IncrementRef(ref int x)
Console.WriteLine($"IncrementRef: {x}");
Выходные параметры. Модификатор out
GetData(x, 15, out area, out perimetr);
Console.WriteLine("Площадь : " + area);
Console.WriteLine("Периметр : " + perimetr);
static void GetData(int x, int y, out int area, out int perim)
Входные параметры. Модификатор in
Пример (входные параметры с модификатором in)
static void GetData(in int x, int y, out int area, out int perim)
// x = x + 10; – нельзя изменить значение параметра x
static void Addition(params int[ ] integers)
for (int i = 0; i < integers.Length; i++)
Методы. Способы передачи параметров.
Преподаватель Кривошеина А.В.
ЧУО «Колледж бизнеса и права»
Определение метода
- Метод — функциональный элемент класса, реализующий вычисления или другие действия. Методы определяют поведение класса и составляют его интерфейс.
- Метод – это конструкция в виде блока кода, которая выполняет некоторые действия, и имеет логическую смысловую нагрузку. Аналогом методов языка C#, являются математические функции.
Синтаксис метода
[ атрибуты ] [ спецификаторы ] тип имя ( [ параметры ] )
{
тело_метода
}
- Спецификаторы: new, public, protected, internal, protected internal, private, static, virtual, sealed, override, abstract, extern.
- Метод класса имеет непосредственный доступ к его полям.
метод Main
- консольная программа на языке C# должна содержать как минимум один метод - метод Main, который является точкой входа в приложение:
{
}
Пример метода
class Program
{
{
}
{
}
}
Вызов метода
- Для вызова метода указывается его имя, после которого в скобках идут значения для его параметров (аргументы),если метод принимает параметры:
имя_метода ([аргументы]);
Вызов метода SayHello:
Вызов метода
using System;
namespace HelloApp
{
class Program
{
{
}
{
SayHello();
}
}
}
Hello –консольный вывод
метод
SayHello
Возвращение значения
- Если метод имеет любой другой тип, отличный от void, то такой метод обязан вернуть значение этого типа. Для этого применяется оператор return, после которого идет возвращаемое значение:
return возвращаемое_значение;
Примеры методов с возвращаемым значением:
static int Sum()
{
int x = 2;
int y = 3;
int z = x + y;
return z;
}
{
return "Hello";
}
return x + y;
class Program
class Program
{
{
string message = Hello();
int s = Sum();
Console.WriteLine(message); // Hello
Console.WriteLine(s); // 5
}
…
}
Результат метода, который возвращает значение, мы можем присвоить переменной или
использовать
иным образом
в программе
Выход из метода
- Оператор return не только возвращает значение, но и производит выход из метода.
- Однако мы можем использовать оператор return и в методах с типам void.
- Типичная ситуация - в зависимости от опеределённых условий произвести выход из метода.
{
int hour = 23;
if (hour > 22)
{
return;
}
else
{
}
}
Сокращенная запись методов
{
}
static void SayHello() => Console.WriteLine("Hello");
Подобным образом мы можем сокращать и методы, которые возвращают значение
{
return "Hello";
}
static string Hello() => "Hello";
Параметры методов
- Параметры позволяют передать в метод некоторые входные данные:
- При вызове данного метода нам обязательно надо передать на место этих параметров два числа:
static int Sum(int x, int y)
{
return x + y;
}
{
int result = Sum(10, 15);
Console.WriteLine(result); // 25
}
Параметры методов
- Передаваемые параметру значения могут представлять значения переменных или результат работы сложных выражений, которые возвращают некоторое значение:
{
int a = 25;
int b = 35;
int result = Sum(a, b);
Console.WriteLine(result); // 60
result = Sum(b, 45);
Console.WriteLine(result); // 80
result = Sum(a + b + 12, 18);
Console.WriteLine(result); // 90
}
Необязательные параметры
- Для таких параметров необходимо объявить значение по умолчанию. После необязательных параметров все последующие параметры также должны быть необязательными:
{
}
- Так как последние два параметра объявлены как необязательные, то мы можем при вызове аргументы для них (один из них или оба) опустить:
{
OptionalParam(2, 3);
OptionalParam(2,3,10);
}
Именованные параметры
- В предыдущих примерах при вызове методов значения для параметров передавались в порядке объявления этих параметров в методе. Но мы можем нарушить подобный порядок, используя именованные параметры:
{
}
{
OptionalParam(x:2, y:3);
//z использует значение по умолчанию
OptionalParam(y:2, x:3, s:10);
}
Передача параметров по ссылке и значению
- Существует два способа передачи параметров в метод в языке C#: по значению и по ссылке.
- Наиболее простой способ передачи параметров представляет передача по значению, по сути это обычный способ передачи параметров.
Передача параметров по значению
class Program
{
{
Sum(10, 15); // параметры передаются по значению
}
static int Sum(int x, int y)
{
return x + y;
}
}
Передача параметров по ссылке и модификатор ref
{
int x = 10;
int y = 15;
Addition(ref x, y); // вызов метода
Console.WriteLine(x); // 25
}
// параметр x передается по ссылке
static void Addition(ref int x, int y)
{
x += y;
}
Отличия
- При передаче по значению метод получает не саму переменную, а ее копию.
- При передаче параметра по ссылке метод получает адрес переменной в памяти. И, таким образом, если в методе изменяется значение параметра, передаваемого по ссылке, то также изменяется и значение переменной, которая передается на его место.
Пример передачи параметра по значению
{
int a = 5;
IncrementVal(a);
Console.WriteLine($"Переменная a после передачи по значению равна {a}");
}
static void IncrementVal(int x)
{
x++;
Console.WriteLine($"IncrementVal: {x}");
}
- Консольный вывод:
IncrementVal: 6
Переменная a после передачи по значению равна = 5
Пример передачи параметра по ссылке
static void Main(string[] args)
{
int a = 5;
IncrementRef(ref a);
Console.WriteLine($"Переменная a после передачи ссылке равна = {a}");
}
static void IncrementRef(ref int x)
{
x++;
Console.WriteLine($"IncrementRef: {x}");
}
- Консольный вывод:
IncrementRef: 6
Переменная a после передачи по ссылке равна = 6
Выходные параметры. Модификатор out
- Выше мы использовали входные параметры. Но параметры могут быть также выходными. Чтобы сделать параметр выходным, перед ним ставится модификатор out:
- Здесь результат возвращается не через оператор return, а через выходной параметр.
static void Sum(int x, int y, out int a)
{
a = x + y;
}
Использование в программе:
как и в случае с ref ключевое слово out используется как при определении метода, так и при его вызове
{
int x = 10;
int z;
Sum(x, 15, out z);
Console.WriteLine(z);
}
{
int x = 10;
int area;
int perimetr;
GetData(x, 15, out area, out perimetr);
Console.WriteLine("Площадь : " + area);
Console.WriteLine("Периметр : " + perimetr);
}
static void GetData(int x, int y, out int area, out int perim)
{
area= x * y;
perim= (x + y)*2;
}
Мы можем вернуть из метода не один вариант, а несколько
Вместо:
- Вместо:
int x = 10;
int area;
int perimetr;
GetData(x, 15, out area, out perimetr);
- Мы можем написать:
int x = 10;
GetData(x, 15, out int area, out int perimetr);
Входные параметры. Модификатор in
- Кроме выходных параметров с модификатором out метод может использовать входные параметры с модификатором in.
- Модификатор in указывает, что через данный параметр аргумент будет передаваться в метод по ссылке, однако внутри метода значение параметра нельзя будет изменить.
Пример (входные параметры с модификатором in)
Переменные, передаваемые в качестве аргументов in, требуется инициализировать перед передачей в метод
static void GetData(in int x, int y, out int area, out int perim)
{
// x = x + 10; – нельзя изменить значение параметра x
y = y + 10;
area = x * y;
perim = (x + y) * 2;
}
static void Addition(params int[ ] integers)
{
int result = 0;
for (int i = 0; i < integers.Length; i++)
{
result += integers[i];
}
}
{
Addition(1, 2, 3, 4, 5);
int[ ] array = new int[ ] { 1, 2, 3, 4, 5, 6, 7 };
Addition(array);
Addition();
}
- Сам параметр с ключевым словом params при определении метода должен представлять одномерный массив того типа, данные которого мы собираемся использовать.
- При вызове метода на место параметра с модификатором params мы можем передать как отдельные значения, так и массив значений, либо вообще не передавать параметры.
- Если же нам надо передать какие- то другие параметры, то они должны указываться до параметра с ключевым словом params.
- Также этот способ передачи параметров надо отличать от передачи массива в качестве параметра.
Вопросы и упражнения
- Какой результат работы будет у следующей программы и почему:
class Program
{
{
int x;
Increment(ref x);
Console.WriteLine(x);
}
static void Increment(ref int x)
{
x++;
}
}
- Какое число (или какие числа) выведет на консоль следующая программа и почему: