Ноу Інти, лекція, методи основні поняття

Методи: основні поняття. Перевантаження методів.

Методи: основні поняття

Метод - це функціональний елемент класу, який реалізує обчислення або інші дії, що виконуються класом або його примірником (об'єктом). Метод являє собою закінчений фрагмент коду, до якого можна звернутися по імені. Він описується один раз, а викликатися може багаторазово. Сукупність методів класу визначає, що конкретно може робити клас. Наприклад, стандартний клас Math містить методи, які дозволяють обчислювати значення математичних функцій.

  1. Атрибути і спеціфіктори є необов'язковими елементами синтаксису опису методу. На даному етапі атрибути нами використовуватися не будуть, а з усіх специфікаторів ми в обов'язковому порядку будемо використовувати специфікатор static. який дозволить звертатися до методу класу без створення його примірника.

Зауваження .Остальние специфікатор ми розглянемо в розділі "класи".

  • Тіп_возвращаемого_результата визначає тип значення, що повертається методом. Це може бути будь-який тип, включаючи типи класів, створювані програмістом. Якщо метод не повертає ніякого значення, необхідно вказати тип void (в цьому випадку в тілі методу відсутня оператор return).
  • Імя_метода - ідентифікатор, заданий програмістом з урахуванням вимог, що накладаються на ідентифікатори в С #, відмінний від тих, які вже використані для інших елементів програми в межах поточної області видимості.
  • Спісок_параметров є послідовність пар, що складаються з типу даних і ідентифікатора, розділених комами. Параметри - це змінні або константи, які отримують значення, передані методу при виклику. Якщо метод не має параметрів, то спісок_параметров залишається порожнім.
  • Значення визначає значення, що повертається методом. Тип значення має відповідати тіпу_возвращаемого_результата або приводиться до нього.
  • Розглянемо найпростіший приклад методу:

    В даном прикладі в метод Func не передаються ніякі значення, тому список параметрів порожній. Крім того метод нічого не повертає, тому тип значення void. В основному методі Main ми викликали метод Func два рази. Якщо буде необхідно, то даний метод можна буде викликати ще стільки раз, скільки буде потрібно для вирішення завдання.

    Завдання.
    1. Додайте в метод Main третій виклик методу Func.
    2. Перетворіть програму так, щоб метод Func викликався n раз.

    Змінимо вихідний приклад так, щоб в нього передавалося значення х. а сам метод повертав значення y.

    В даному прикладі метод Func містить параметр х. тип якого double. Для того, щоб метод Func повертав в викликає його метод Main значення виразу 1 / x (тип якого double), перед ім'ям методу вказується тип значення - double. а в тілі методу використовується оператор передачі управління - return. Оператор return завершує виконання методу і передає управління в точку його виклику.

    Завдання. Перетворіть програму так, щоб метод Func повертав значення виразу:
    1. x 2;

    Розглянемо ще один приклад:

    В даному прикладі метод Func має два цілочисельних параметра - x. y. а як результат метод повертає найбільше з них. На етапі опису методу (рядок 1) вказуються формальні параметри, на етапі виклику (рядок 2) в метод передаються фактичні параметри, які за кількістю і за типом збігаються з формальними параметрами. Якщо кількість фактичних і формальних параметрів буде різним, то компілятор видасть відповідне повідомлення про помилку. Якщо параметри будуть відрізнятися типами, то компілятор спробує виконати неявне перетворення типів. Якщо неявне перетворення неможливо, то також буде згенеровано помилка.

    Зверніть увагу на те, що при виклику методу Func використовувалося вкладення одного виклику в інший.

    Завдання. Перетворіть програму так, щоб за допомогою методу Func можна було знайти найбільше значення з чотирьох чисел: a, b, c, d. Метод Func при цьому не змінювати.

    У загальному випадку параметри використовуються для обміну інформацією між викликає і викликається методами. У С # для обміну передбачено чотири типи параметрів: параметри-значення, параметри-посилання, вихідні параметри, параметри-масиви.

    При передачі параметра за значенням метод отримує копії параметрів, і оператори методу працюють з цими копіями. Доступу до початкових значень параметрів у методу немає, а, отже, немає і можливості їх змінити.

    Зауваження. Всі приклади, розглянуті раніше, використовували передачу даних за значенням.

    Розглянемо невеликий приклад:

    В даному прикладі в методі Func формальний параметр y і відповідний йому фактичний параметр b методу Main були помічені специфікатором out. Тому значення b до виклику методу Func можна було не визначати, але зміна параметра y відбилися на зміні значення параметра b.

    Зауваження. Параметри-масиви будуть розглянуті пізніше.

    перевантаження методів

    Іноді буває зручно, щоб методи, що реалізують один і той же алгоритм для різних типів даних, мали одне і те ж ім'я. Використання декількох методів з одним і тим же ім'ям, але різними типами і кількістю параметрів називається перевантаженням методів .Компілятор визначає, який саме метод потрібно викликати, за типом і кількістю фактичних параметрів.

    Розглянемо наступний приклад:

    При виклику методу max компілятор вибирає варіант, відповідний типу і кількості переданих в метод аргументів. Якщо точного відповідності не знайдено, виконуються неявні перетворення типів відповідно до загальних правил. Якщо перетворення неможливо, видається повідомлення про помилку. Якщо вибір перевантаженого методу можливий більш ніж одним способом, то вибирається "кращий" з варіантів (варіант, що містить менші кількість і довжину перетворень у відповідності до правил перетворення типів). Якщо існує кілька варіантів, з яких неможливо вибрати кращий, видається повідомлення про помилку.

    Перевантаження методів є проявом поліморфізму. одного з основних властивостей ООП. Програмісту набагато зручніше пам'ятати одне ім'я методу і використовувати його для роботи з різними типами даних, а рішення про те, який варіант методу викликати, покласти на компілятор. Цей принцип широко використовується в класах бібліотеки .NET. Наприклад, в стандартному класі Console метод WriteLine перевантажений 19 разів для виведення величин різних типів.

    Схожі статті