Файл: Методы. Способы передачи параметров. Преподаватель Кривошеина А. В.pptx

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 04.02.2024

Просмотров: 44

Скачиваний: 0

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

СОДЕРЖАНИЕ

Методы. Способы передачи параметров.

Преподаватель Кривошеина А.В.

ЧУО «Колледж бизнеса и права»

Определение метода

Синтаксис метода

[ атрибуты ] [ спецификаторы ] тип имя ( [ параметры ] )

{

тело_метода

}

метод Main

Пример метода

class Program

{

{

}

{

}

}

Вызов метода

Вызов метода SayHello:

using System;

namespace HelloApp

{

class Program

{

{

}

{

SayHello();

}

}

}

Hello –консольный вывод

Возвращение значения

Примеры методов с возвращаемым значением:

static int Sum()

{

int x = 2;

int y = 3;

int z = x + y;

return z;

}

{

return "Hello";

}

class Program

class Program

{

{

string message = Hello();

int s = Sum();

Console.WriteLine(message); // Hello

Console.WriteLine(s); // 5

}

}

Выход из метода

{

int hour = 23;

if (hour > 22)

{

return;

}

else

{

}

}

Сокращенная запись методов

{

}

static void SayHello() => Console.WriteLine("Hello");

Подобным образом мы можем сокращать и методы, которые возвращают значение

{

return "Hello";

}

Параметры методов

Параметры методов

{

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(x:2, y:3);

//z использует значение по умолчанию

OptionalParam(y:2, x:3, s:10);

}

Передача параметров по ссылке и значению

Передача параметров по значению

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}");

}

Пример передачи параметра по ссылке

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}");

}

Выходные параметры. Модификатор 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;

}

Вместо:

Входные параметры. Модификатор 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();

}

Вопросы и упражнения

Дан следующий метод:

Дан следующий метод:

Домашнее задание:

Методы. Способы передачи параметров.

Преподаватель Кривошеина А.В.

ЧУО «Колледж бизнеса и права»

Определение метода

  • Метод — функциональный элемент класса, реализующий вычисления или другие действия. Методы определяют поведение класса и составляют его интерфейс.
  • Метод – это конструкция в виде блока кода, которая выполняет некоторые действия, и имеет логическую смысловую нагрузку. Аналогом методов языка 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:
  • static void Sum(int x, int y, out int a)

    {

    a = x + y;

    }

  • Здесь результат возвращается не через оператор return, а через выходной параметр.

Использование в программе:


как и в случае с 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++;

    }

    }

  • Какое число (или какие числа) выведет на консоль следующая программа и почему:
  • class Program

    {

    {

    int i = 0;

    Console.Write(i++ + Calculate(i));

    Console.WriteLine(i);

    }

    public static int Calculate(int i)

    {

    Console.Write(i++);

    return i;

    }

    }