Перевантаження Методів
Перевантаження методів у C# дозволяє визначати кілька методів з однаковою назвою в одному класі, які відрізняються типами параметрів, кількістю параметрів або обома цими характеристиками. Це забезпечує більш чистий і гнучкий спосіб обробки різних сценаріїв введення даних.
Наприклад, можна створити два методи з однаковою назвою, але з різною кількістю параметрів:
index.cs
12345678910111213141516171819using 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
12345678910static 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
123sum(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
12345678910static 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
1234567891011121314151617181920212223242526using 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. Який із наведених прикладів є коректним прикладом перевантаження методу?
Дякуємо за ваш відгук!
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат
Awesome!
Completion rate improved to 2.04
Перевантаження Методів
Свайпніть щоб показати меню
Перевантаження методів у C# дозволяє визначати кілька методів з однаковою назвою в одному класі, які відрізняються типами параметрів, кількістю параметрів або обома цими характеристиками. Це забезпечує більш чистий і гнучкий спосіб обробки різних сценаріїв введення даних.
Наприклад, можна створити два методи з однаковою назвою, але з різною кількістю параметрів:
index.cs
12345678910111213141516171819using 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
12345678910static 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
123sum(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
12345678910static 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
1234567891011121314151617181920212223242526using 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. Який із наведених прикладів є коректним прикладом перевантаження методу?
Дякуємо за ваш відгук!