Огляд перевантаження в C #

При перевантаженні в C # поліморфізм - це поняття об'єктно-орієнтованого програмування, яке визначає здатність об'єкта, змінної або методу приймати кілька форм під час компіляції / виконання. Фактори в реальному часі, такі як дані, параметри, повернення об'єкта тощо, визначають, яку форму буде приймати об'єкт / метод / змінна. Це дозволяє програмісту кодувати більш загальний, а не конкретний. Наприклад, ви їсте фрукти. Те, як ви їсте фрукти, залежить від фруктів, наданих вам у режимі реального часу. Ви їсте яблуко відразу, тоді як очищаєте банан перед їжею. Простий.

Що таке перевантаження методом у C #?

Метод Перевантаження - це реалізація концепції поліморфізму за часом. Розробники можуть визначати подібні методи одним і тим же найменуванням, відрізняючись або кількістю аргументів, порядком аргументів або типом аргументів. На прикладі фруктів не потрібно визначати окремі методи для кожного фрукта (їжтеАппле, їжте банан тощо). Ви можете використовувати те саме ім’я, щоб їсти фрукти і передавати йому різні параметри. Компілятор автоматично викликає відповідний метод.

Давайте зараз візьмемо перспективу C #. Найпростіше кажучи, метод перевантаження методом у C # - це коли у вас є два або більше методів з однаковою назвою, але різні підписи. Цього можна досягти різними способами:

  • Різна кількість параметрів.
  • Різні типи параметрів.
  • Різний порядок параметрів.
  • Необов’язкові параметри.
  • Названі аргументи.

Як працює перевантаження методу в C #?

Отже, як називається відповідний метод, заснований на аргументах / параметрах? Ну, компілятор перевіряє кожне визначення методу під час компіляції та прив'язує виклики методу до відповідних визначень. Якщо є два методи з однаковим іменем, компілятор перевіряє підпис методів і прив'язує відповідне визначення до виклику. Навіть якщо підписи не можуть вирішити двозначність, компілятор шукає неявне перетворення аргументів, щоб відповідати підписам. Якщо неявна конверсія призводить до збігу підписів, прив'язка виконується. Якщо ні, компілятор генерує помилку.

Ми розглянемо різні приклади в цій статті, щоб зрозуміти роботу компілятора в різних видах перевантаження методів.

Типи перевантаження методу в C #

Тут ми обговорюємо різні типи методів перевантаження в C # наведені нижче:

1. Різна кількість параметрів

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

Код

Наведений нижче приклад досить прямолінійний і не вимагає.

using System;
public class Program
(
public static void Main()
(
Func(10);)
public static void Func(int a)
(
Console.WriteLine("Single Parameter");
)public static void Func(int a, int b)
(
Console.WriteLine("Multiple Parameters");
)
)

Вихід:

2. Різні типи параметрів

Коли підписи методу мають параметри (и), які відрізняються між собою. Кількість параметрів може бути або не бути однаковою.

Приклад 1

У наведеному нижче прикладі обидва методи очікують одного аргументу. Отже, виходячи з типу аргументу, переданого під час виклику методу, компілятор пов'язує відповідне визначення методу.

Код

using System;
public class Program
(
public static void Main()
(
Func("Hello World");
)
public static void Func(int a)
(
Console.WriteLine("Integer Parameter");
)
public static void Func(string b)
(Console.WriteLine("String Parameter");
)
)

Вихід:

Приклад 2

Тепер давайте давайте компілятору щось подумати. Ми б перевантажили метод подвійного та поплавкового типу. Ми знаємо, що ціле число завжди може бути неявно перетворене у тип float, а також у подвійний тип.

Коли ми передаємо цілий аргумент, компілятор перевіряє наявність неявного перетворення і виявляє, що найкраще можливе перетворення - це ціле число, яке плаває. Отже, називається метод float.

Код

using System;
public class Program
(
public static void Main()
(
Func(10);
)
public static void Func(double a)
(
Console.WriteLine("Double Parameter");
)
public static void Func(float b)
(
Console.WriteLine("Floating Point Parameter");
)
)

Вихід:

3. Різний порядок параметрів

Коли кількість і тип аргументів однакові, але порядок їх передачі відрізняється.

Приклад 1

Приклад нижче досить прямолінійний.

Код

using System;
public class Program
(
public static void Main()
(
Func(10, 0.1);
)
public static void Func(int a, double b)
(
Console.WriteLine("Int-Double Parameters");
)
public static void Func(double a, int b)
(
Console.WriteLine("Double-Int Parameter");
)
)

Вихід:

Приклад 2

Що буде, коли ми передамо два цілих аргументи у наведеному вище прикладі? Давай дізнаємось.

Код

Func(10, 1);

Вихід:

4. Необов’язкові параметри

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

Примітка. Це має перевагу над непрямим перетворенням.

Давайте зрозуміємо це на прикладі.

Приклад

У наведеному нижче прикладі ми надаємо компілятору два варіанти. Або це може неявно перетворити аргумент, щоб відповідати методу підпису. Або він може передавати значення за замовчуванням необов'язкового аргументу. Компілятор віддає перевагу останньому підходу.

Код

using System;
public class Program
(
public static void Main()
(
Func(10);
)
public static void Func(int a, int b = 1)
(
Console.WriteLine("Int-Int Parameters");
)
public static void Func(double a)
(
Console.WriteLine("Double Parameter");
)
)

Вихід:

5. Названі аргументи

C # має ще одну особливість передачі імені аргументів під час виклику методу. Це допомагає і при перевантаженні методів. Розробники можуть обрати певний метод, навіть якщо переданий аргумент за замовчуванням мав би назвати інший метод. Хоча, перевантажені методи повинні відрізнятися підписом.

Приклад

У наведеному нижче прикладі ми доручаємо компілятору викликати певний метод, передаючи ім'я параметра. Потім компілятор призупиняє свою логіку визначення найкращого методу.

Код

using System;
public class Program
(
public static void Main()
(
Func(b: 10);
)
public static void Func(int a)
(
Console.WriteLine("Int-Int Parameters");
)
public static void Func(double b)
(
Console.WriteLine("Double Parameter");
)
)

Вихід:

Правила перевантаження методу в C #

Наступні правила потрібно пам’ятати під час перевантаження методів у вашій програмі C #.

  • Підпис методу повинен бути різним. Чи кількість аргументів, тип аргументів або порядок аргументів повинні бути різними.
  • Тип повернення методів не грає ніякої ролі в перевантаженні методу.
  • Необов’язкові параметри мають перевагу перед непрямим перетворенням типу, коли вирішують, яке визначення методу пов'язувати.
  • Неявне перетворення типу має перевагу над методом батьківського класу.
    Вправа - щоб зрозуміти це, ось вам невелика вправа. Створіть батьківський клас методом, який очікує ціле число Успадковувати дочірній клас. Перевантажте метод з батьківського класу в дочірньому класі таким чином, що метод дочірнього класу очікує аргумент подвійного типу. Створіть об'єкт дочірнього класу та викличте перевантажений метод, передаючи ціле число. Подивіться, що відбувається.

Висновок

Метод перевантаження - досить потужна концепція. Це дуже корисно в написанні елегантного коду. Тим не менш, це може піти настільки, коли десятки методів перевантажені, і розробнику доводиться посилатися на визначення методу під час налагодження помилкових викликів. Щоб цього уникнути, часто пропонується називати свої методи по-різному, коли перевантаження має тенденцію до масштабу на більш високий рівень.

Рекомендовані статті

Це посібник із перевантаження в C #. Тут ми обговорюємо його Метод, як він працює, типи з прикладом та правилами. Ви також можете ознайомитися з іншими запропонованими нами статтями, щоб дізнатися більше -

  1. C # Поки цикл
  2. C # якщо заява
  3. C # Функції
  4. Використання C #
  5. Керівництво по перевантаженню в C ++
  6. Перевантаження в Java
  7. Перевантаження Python
  8. Перевантаження і перезавантаження в C #
  9. Перетворення типів у Java за допомогою типів та прикладів