You are on page 1of 23

Лекція 5.

Методи. Передача параметрів в методи.


Перерахування
Методи класу
Метод – функція, яка оголошена в
класі.
Приклад:
Тип даних Ім’я Опис
результату методу параметрів

static void Main(string[] args)


{
Console.WriteLine("Лабораторна робота.");
}
Модифікатор
методу
Методи класу
Синтаксис оголошення:
[ модифікатор ] тип результату Ім’я Методу
( [ параметри ])
{
… тіло метода …
}

static void Main(string[] args)


{
Console.WriteLine("Лабораторна робота.");
}
Методи класу
class Program
{
static void Main(string[] args)
{
string message = Hello(); // виклик першого метода
Console.WriteLine(message);
int sum = SumFromAtoB(10, 50); // виклик другого метода
Console.WriteLine(sum);
Console.ReadKey();
}
static string Hello() {
return "Привіт!";
}
static int SumFromAtoB(int a, int b) {
int res = 0;
for (int i = a; i <= b; i++) Немає різниці
res += i;
return res; в якому порядку
}
} описані методи
Необов’язкові параметри
static int mySum(int a, int b = 5, int c = 10)
{
return a + b + c;
}
При виклику метода
аргументи b та c
можна не вказувати
static void Main(string[] args)
{
   int x1 = mySum(10);   
   int x2 = mySum(2, 3);
   int x3 = mySum(2, 3, 10);
}
Необов’язкові параметри
Необов’язкові параметри повинні
вказуватися після обов’язкових:
static int mySum(int a = 3, int b, int c = 10)
{
return a + b + c;
}

Помилка. Неможна вказувати


обов’язковий параметр після
необов’язкового
Модифікатори параметрів
static void Main(string[] args)
{
Значення змінних
int x = 10;
int y = 15; «ззовні» функції
Addition(x, y); не змінюються
Console.WriteLine(x); (x=10)
}
static void Addition(int x, int y)
{
x += y;
}
Модифікатори параметрів
Щоб передати змінну за посиланням
(через покажчик) використовується
модифікатор ref:
static void Main(string[] args) {
int x = 10;
int y = 15;
Addition(ref x, y);
Console.WriteLine(x);
}
static void Addition(ref int x, int y) {
x += y;
}
Модифікатори параметрів
Змінні, які передаються через ref
обов’язково повинні мати значення.
В середині методу можна змінювати
значення ref-змінних і вони змінюються
у викликаючому коді.

Окрім ref-параметрів існують ще вихідні


параметри. Вони оголошуються з
модифікатором out.
Модифікатори параметрів
Вихідний параметр – це параметр, у
який записуватиметься значення і яке
буде доступне у зовнішньому коді.
В середині методу забороняється
використовувати значення змінних,
переданих як out.
Усім параметрам, описаним з
модифікатором out повинні бути
присвоєні значення в середині методу.
Модифікатори параметрів
static void Main(string[] args)
{
double a = 10, b = 15, x, y;
double res = Solve(a, b, out x, out y);
Console.WriteLine($"x = {x}, y = {y},
res = {res}");
}
static double Solve(double a, double b,
out double x, out double y)
{
x = a + b;
y = a * b;
return a - b;
}
Модифікатори параметрів
static void Main(string[] args)
{
double x = 7;
Add(out x);
}
static void Add(out double x)
{
x += 5;
} Помилка. Неможна використати
значення змінної х, оскільки вона
може не містити значення
Різниця між ref та out:
ref out
Повинна Може бути
Змінна, яка вказується
мати неініціалізов
при виклику методу
значення ана
Чи можна
використовувати так ні
значення параметра?
Чи можна записувати
так так
значення у параметр
Чи обов’язково
записувати значення у ні так
параметр?
Передача масивів у методи
Масиви передаються як звичайні змінні
static void Main(string[] args)
{
int[] arr = { 1, 2, 3, 4 };
int[]newArr = Reverse(arr);
}
static int[] Reverse(int[] arr)
{
int[] newArr = new int[arr.Length];
for (int i = 0; i < arr.Length; i++)
newArr[i] = arr[arr.Length - i - 1];
return newArr;
}
Передача масивів у методи
static void Main(string[] args)
{
int[] arr = { 1, 2, 3, 4 };
Reverse(arr);
}
static void Swap(ref int a, ref int b)
{
int tmp = a; Масив автоматично
a = b; передається через ref
b = tmp;
}
static void Reverse(int[] arr)
{
for (int i = 0; i < arr.Length / 2; i++)
Swap(ref arr[i], ref arr[arr.Length - i - 1]);
}
Передача змінної кількості
аргументів у метод
static void Main(string[] args)
{
double sum = Summa(1, 2, 3);
double sum2 = Summa(1, 2, 3, 4, 5, 6, 7);
}
static double Summa(params double []arr)
{
double res = 0;
for (int i = 0; i < arr.Length; i++)
res += arr[i];
return res;
}
Перерахування
Окрім звичайних типів даних у мові C# є
тип даних «перерахування» (enum).
Він дозволяє оголосити набір логічно
пов’язаних між собою констант.
enum Days
{
Константи отримують
    Monday, значення 0, 1, 2, 3 і т.д.
    Tuesday,
    Wednesday, Monday = 0,
    Thursday, Tuesday = 1,
    Friday,
    Saturday, …
    Sunday Sunday = 6
}
Перерахування
enum може мати лише цілий тип (по
замовчуванню – int). Але можна
вказувати інший тип:
enum DayTime : byte
{
    Morning,
    Afternoon,
    Evening,
    Night
}
Перерахування
Константам enum можна вказувати
значення. Тоді наступна константа
(якщо їх не вказане значення) буде мати
значення на одиницю більше, ніж
попереднє: enum Operation
{
    Add = 1,  
    Subtract,
    Multiply,
    Divide   
}
Перерахування
Константам enum можна вказувати
значення. Тоді наступна константа
(якщо їх не вказане значення) буде мати
значення на одиницю більше, ніж
попереднє:
enum Operation enum Operation
{ {
    Add = 1,       Add = 2,
    Subtract,     Subtract = 4,
    Multiply,     Multiply = 8,
    Divide        Divide = 16
} }
Перерахування
Приклад використання у програмах:
class Program {
    enum Operation {
        Add = 1,
        Subtract,
        Multiply,
        Divide
    }
    static void MathOp(double x,  double y, Operation op) {
        double result = 0.0;
        switch (op)
        {
            case Operation.Add:
                result = x + y;
                break;
            case Operation.Subtract:
                result = x - y;
                break;            
Перерахування
Приклад використання у програмах:
case Operation.Multiply:
                result = x * y;
                break;
            case Operation.Divide:
                result = x / y;
                break;
        }
        Console.WriteLine("Результат операції рівний {0}",
result);
    }
    static void Main(string[] args)
    {
        MathOp(10, 5, Operation.Add);
        MathOp(11, 5, Operation.Multiply);            
        Console.ReadLine();
    } 
}
Для опрацювання
вдома:
1) https://metanit.com/sharp/tutorial/2.8.php
2) https://metanit.com/sharp/tutorial/2.9.php
3) https://metanit.com/sharp/tutorial/2.10.php
4) https://metanit.com/sharp/tutorial/2.11.php
5) https://metanit.com/sharp/tutorial/2.12.php
6) http://www.sharp-blog.ru/enum-in-csharp-part1
7) https://professorweb.ru/my/csharp/charp_theory/level5/5_9.php
8) https://professorweb.ru/my/csharp/charp_theory/level5/5_10.php
9) https://professorweb.ru/my/csharp/charp_theory/level5/5_11.php

You might also like