Один метод перегружает другой, или оба метода перегружены?


13

Если я создаю этот метод

public void foo()

И тогда я создаю перегруженную версию, как это

public void foo( string bar )

Говорим ли мы, что вторая функция перегружает первую, или оба метода одинаково «перегружены»?

Это подразумевает (я думаю), что есть функция базового типа, которая перегружается другой функцией (что-то вроде наследования, но не совсем).

Предполагая, что один метод может «перегрузить другой», также подразумеваются такие термины, как «перегрузчик» и «перегрузка», если это вообще слово. Но это не совсем правильно, тем более что у вас может быть несколько перегрузок.

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

Примеры:

  • Я перегружаю foo
  • Я перегружать fooсfoo( string bar )
  • Я создаю перегруженный метод
  • Я делаю фу перегружен

Так что да, это заставило меня задуматься, я не уверен, что с этим делать. Существуют сотни, если не тысячи, описаний перегрузок функций в сети, но на первый взгляд я не смог найти никакого решения по этому поводу.


Я хотел бы знать, почему слово перегрузка использовалось для этого. Кажется, это не имеет никакого смысла. Что загружается? Как это загружается снова или чрезмерно?
Мартин Маат

@MartinMaat Читали ли вы принятый ответ от thiton и комментарии к нему kindall ? Кажется, они хорошо объясняют, что загружается (перегружено).
8bittree

Я прочитал их, они объясняют концепцию, а не этиологию.
Мартин Маат

Ответы:


29

Когда речь идет о перегрузках, перегружается имя функции, а не сама функция. Функции, перегружающие имя, являются «перегрузками» и перегружают имя, но не друг друга. В вашем примере и то, "public void foo()"и "public void foo( string bar )"другое перегружают именем «foo». Следовательно, вы не можете говорить с точки зрения перегрузчика и перегрузщика одной из функций, потому что они не имеют прямой связи.

В ваших примерах вы можете сказать, что вы перегружаете "foo" (имя) с помощью "foo (строка строки)" (функция), но вы не можете сказать, что вы создали перегруженный метод, потому что методы никогда не перегружаются. Вы можете сказать, что вы создаете метод перегрузки. Формулировать «создание перегруженного foo» - это просто худший способ сказать «перегрузить foo».


Но разве не каждая функция перегружает свое имя, даже если ни одна другая функция не имеет такого же имени?
оставил

Я согласен с этим как ответ на общий вопрос выше. Но если одна вызывает одну функцию из другой, то я чувствую, что одна перегружена другой.
Джошуа Дрейк

3
@leftaroundabout: «Перегрузка» подразумевает, что вы выполняете больше «загрузки», чем обычно, поэтому этот термин используется только тогда, когда у вас более одной функции с одинаковым именем.
любезно

Согласился с @kindall; слово «перегрузка» в контексте разработки программного обеспечения означает «назначать более одного значения»; перегрузка столбцов в БД (значение зависит от других полей), перегрузка параметров (значение зависит от других параметров) и т. д. Один метод не перегружает любой другой, но если существует несколько методов с одним именем , имя равно " перегружен».
KutuluMike

15

Я бы просто сказал fooперегружен. Здесь, безусловно, не происходит никаких отношений хозяин / раб или родитель / ребенок.


2
Согласитесь - это перегруженное имя метода или оператора, а не сам метод. Не следует путать с переопределением , когда реализация данного метода в подклассе вытесняет реализацию в родительском классе.
Калеб

1
Я тоже согласен с этим, но я думаю, что Титон лучше объясняет это. Спасибо за ваш ответ !
Виллем д'Хаселер

3

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.