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