Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Вивчайте Перевантаження Методів | Основи ООП
C# Понад Базовий Рівень

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

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

Наприклад, можна створити два методи з однаковою назвою, але з різною кількістю параметрів:

index.cs

index.cs

copy
12345678910111213141516171819
using System; class ConsoleApp { static int sum(int a, int b) { return a + b; } static int sum(int a, int b, int c) { return a + b + c; } static void Main() { Console.WriteLine(sum(5, 7)); Console.WriteLine(sum(5, 7, 9)); } }

У наведеному вище коді метод sum був перевантажений для двох варіантів параметрів. Метод також може мати різні типи повернення для різних своїх варіацій, однак важливо уникати неоднозначності, інакше компілятор видасть помилку, оскільки основний спосіб для компілятора розрізняти два методи з однаковою назвою — це їхній список параметрів.

Наприклад:

index.cs

index.cs

copy
12345678910
static int sum(int a, int b) { return a + b; } // This is wrong and will show an error static long sum(int a, int b) { return a + b; }

Наведений вище код є некоректним, оскільки параметри повністю збігаються з оригінальним методом, а тип повернення відрізняється. Це не дозволяється, оскільки компілятору (або навіть людині) буде неможливо визначити, який саме метод викликати:

index.cs

index.cs

copy
123
sum(1, 3); // Should it execute `int sum(int a, int b)` or `long sum(int a, int b)` ? // It is impossible to reach a good answer for the compiler in this case so it shows an error

Саме тому, при перевантаженні методу, метод із різним типом повернення також повинен мати інший набір параметрів, щоб його можна було відрізнити та уникнути неоднозначності. Наступний приклад також є неправильним:

index.cs

index.cs

copy
12345678910
static int sum(int a, int b) { return a + b; } // This is wrong and will show an error static long sum(int first, int second) { return first + second; }

Це тому, що імена параметрів не мають значення, але їх типи мають. Наступні випадки перевантаження є коректними:

index.cs

index.cs

copy
1234567891011121314151617181920212223242526
using System; class ConsoleApp { static int sum(int a, int b) { return a + b; } static long sum(long a, long b) { return a + b; } static string sum(int a, long b, float c) { return Convert.ToString(a + b + c); } static void Main() { Console.WriteLine(sum(5, 7)); // Calls 'int sum()' Console.WriteLine(sum(500000000000, 700000000000)); // Calls 'long sum()' Console.WriteLine(sum(5, 7, 9)); // Calls 'string sum()' } }

1. Як компілятор розрізняє перевантажені методи?

2. Який із наведених прикладів є коректним прикладом перевантаження методу?

question mark

Як компілятор розрізняє перевантажені методи?

Select the correct answer

question mark

Який із наведених прикладів є коректним прикладом перевантаження методу?

Select the correct answer

Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 4. Розділ 7

Запитати АІ

expand

Запитати АІ

ChatGPT

Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат

Awesome!

Completion rate improved to 2.04

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

Свайпніть щоб показати меню

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

Наприклад, можна створити два методи з однаковою назвою, але з різною кількістю параметрів:

index.cs

index.cs

copy
12345678910111213141516171819
using System; class ConsoleApp { static int sum(int a, int b) { return a + b; } static int sum(int a, int b, int c) { return a + b + c; } static void Main() { Console.WriteLine(sum(5, 7)); Console.WriteLine(sum(5, 7, 9)); } }

У наведеному вище коді метод sum був перевантажений для двох варіантів параметрів. Метод також може мати різні типи повернення для різних своїх варіацій, однак важливо уникати неоднозначності, інакше компілятор видасть помилку, оскільки основний спосіб для компілятора розрізняти два методи з однаковою назвою — це їхній список параметрів.

Наприклад:

index.cs

index.cs

copy
12345678910
static int sum(int a, int b) { return a + b; } // This is wrong and will show an error static long sum(int a, int b) { return a + b; }

Наведений вище код є некоректним, оскільки параметри повністю збігаються з оригінальним методом, а тип повернення відрізняється. Це не дозволяється, оскільки компілятору (або навіть людині) буде неможливо визначити, який саме метод викликати:

index.cs

index.cs

copy
123
sum(1, 3); // Should it execute `int sum(int a, int b)` or `long sum(int a, int b)` ? // It is impossible to reach a good answer for the compiler in this case so it shows an error

Саме тому, при перевантаженні методу, метод із різним типом повернення також повинен мати інший набір параметрів, щоб його можна було відрізнити та уникнути неоднозначності. Наступний приклад також є неправильним:

index.cs

index.cs

copy
12345678910
static int sum(int a, int b) { return a + b; } // This is wrong and will show an error static long sum(int first, int second) { return first + second; }

Це тому, що імена параметрів не мають значення, але їх типи мають. Наступні випадки перевантаження є коректними:

index.cs

index.cs

copy
1234567891011121314151617181920212223242526
using System; class ConsoleApp { static int sum(int a, int b) { return a + b; } static long sum(long a, long b) { return a + b; } static string sum(int a, long b, float c) { return Convert.ToString(a + b + c); } static void Main() { Console.WriteLine(sum(5, 7)); // Calls 'int sum()' Console.WriteLine(sum(500000000000, 700000000000)); // Calls 'long sum()' Console.WriteLine(sum(5, 7, 9)); // Calls 'string sum()' } }

1. Як компілятор розрізняє перевантажені методи?

2. Який із наведених прикладів є коректним прикладом перевантаження методу?

question mark

Як компілятор розрізняє перевантажені методи?

Select the correct answer

question mark

Який із наведених прикладів є коректним прикладом перевантаження методу?

Select the correct answer

Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 4. Розділ 7
some-alt