русс | укр

Мови програмуванняВідео уроки php mysqlПаскальСіАсемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование


Linux Unix Алгоритмічні мови Архітектура мікроконтролерів Введення в розробку розподілених інформаційних систем Дискретна математика Інформаційне обслуговування користувачів Інформація та моделювання в управлінні виробництвом Комп'ютерна графіка Лекції


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


Дата додавання: 2015-01-08; переглядів: 1259.


 

Компілятор визначає який саме метод потрібно викликати за типом фактичних параметрів. Цей процес називається дозволом (resolution) перевантаження. Тип повертаємого методом значення в дозволі не бере участь. Механізм дозволу заснований на достатньо складному наборі правил, сенс яких зводиться до того, щоб використовувати метод з найбільш відповідними аргументами і видати повідомлення, якщо такий не знайдеться. Допустимо, є чотири варіанти методу, що визначає найбільше значення:

 

// Повертає найбільше з двох цілих:

int max(int а, int b )

// Повертає найбільше з трьох цілих:

int max(int а, int b, int e)

// Повертає найбільше з першого параметра і довжини другого:

int max (int а, string b)

// Повертає найбільше з другого параметра і довжини першого:

int max (string b, int а)

Console.WriteLine( max (1,2));

Console.WriteLine( max (1,2,3));

Console.WriteLine( max (1,"2"));

Console.WriteLine( max ("1",2));

 

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

Перевантажені методи мають одне ім'я, але повинні розрізнятися параметрами, точніше, їх типами і способами передачі (out або ref). Наприклад, методи, заголовки яких приведені нижче, мають різні сигнатури і вважаються перевантаженими:

int max( int а, int b )

int max( int а, ref int b)

 

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

 


<== попередня лекція | наступна лекція ==>
Рядки типу StringBuilder | Рекурсивні методи


Онлайн система числення Калькулятор онлайн звичайний Науковий калькулятор онлайн