Чи один метод перевантажує інший, чи обидва способи "перевантажені"


13

Якщо я створю цей метод

public void foo()

І тоді я створюю перевантажену версію на зразок цієї

public void foo( string bar )

Ми говоримо, що друга функція перевантажує першу, або обидва методи однаково «перевантажені»?

Це означатиме (я думаю), що існує функція базового типу, яка перевантажена іншою функцією (дещо схожа на успадкування, але насправді).

Якщо припустити, що один метод може "перевантажувати інший", це також означатиме такі терміни, як "перевантажувач" і "перевантажувач", якщо це слово взагалі. Але це зовсім не вірно, тим більше, що у вас може бути кілька перевантажень.

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

Приклади:

  • Я перевантажую foo
  • Я перевантажувати fooзfoo( string bar )
  • Я створюю перевантажений метод
  • Я роблю foo перевантаженим

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


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

@MartinMaat Чи прочитали ви прийняту відповідь титоном та коментарем kindall до неї? Вони, здається, добре справляються з поясненням того, що завантажено (понад).
8bittree

Я їх читав, вони пояснюють поняття, а не етомологію.
Мартін Мейт

Відповіді:


29

Коли ми говоримо про перевантаження, назва функції перевантажується, а не сама функція. Функції, що перевантажують ім'я, - це "перевантаження" і перевантажують ім'я, але не один одного. У вашому прикладі "public void foo()"і "public void foo( string bar )"обидва перевантажують ім'я "foo". Отже, ви не можете говорити про перевантаження і навантаження на одну з функцій, оскільки вони не мають прямого зв'язку.

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


Але чи не кожна функція перевантажує свою назву, навіть якщо жодна інша функція не має тієї самої?
близько

Я погоджуюся з цим як відповіддю на загальне вище питання. Але якщо один викликав одну з функцій від іншої, то я відчуваю почуття, в якому одна перевантажує іншу.
Джошуа Дрейк

3
@leftaroundabout: "Перевантаження" означає, що ви робите більше "завантаження", ніж зазвичай, тому термін використовується лише тоді, коли у вас є більше однієї функції з тим же ім'ям.
kindall

Погоджено з @kindall; слово "перевантаження" в контексті розробки програмного забезпечення означає "присвоїти більше одного значення"; перевантаження стовпців у БД (значення залежить від інших полів), параметрів перевантаження (значення залежить від інших параметрів) тощо. Один метод не перевантажує жоден інший, але якщо в одному імені є більше одного методу , ім'я " перевантажений ".
KutuluMike

15

Я б просто сказав foo, що перевантажений. Тут, звичайно, немає стосунків хазяїна / раба чи батька / дитини.


2
Погодьтеся - це назва методу чи оператора, який перевантажений, а не сам метод. Не слід плутати з переважними , коли реалізація заданого методу в підкласі витісняє реалізацію в батьківському класі.
Калеб

1
Я теж погоджуюся з цим, але я думаю, що Тітон справляється з кращою роботою в його поясненні. Спасибі за вашу відповідь !
Віллем Д'Хассілер

3

Я думаю, що хороший спосіб висловити це - зосередитись на кінцевому результаті, а не на змінах, внесених у класі з часом. Таким чином, замість того, щоб сказати "я перевантажив" foo "на" foo (інші параметри) ", ви говорите" foo - це перевантажена функція, з 'foo ()' і 'foo (інші параметри). "

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.