Czy jedna metoda przeciąża drugą, czy obie metody są „przeciążone”


13

Jeśli utworzę tę metodę

public void foo()

A potem tworzę taką przeciążoną wersję

public void foo( string bar )

Czy mówimy, że druga funkcja przeciąża pierwszą, czy obie metody są jednakowo „przeciążone”?

Oznaczałoby to (tak sądzę), że istnieje funkcja typu podstawowego, która jest przeciążona przez inną funkcję (trochę jak dziedziczenie, ale nie tak naprawdę).

Zakładając, że jedna metoda może „przeciążać inną”, oznaczałoby to także terminy takie jak „przeciążający” i „przeciążający”, jeśli w ogóle jest to słowo. Ale to nie wydaje się właściwe, zwłaszcza że możesz mieć kilka przeciążeń.

Doszedłem do tego pytania, kiedy chciałem zapisać proces tworzenia przeciążonej metody i chciałem jak najbardziej poprawnie zapisać.

Przykłady:

  • Przeciążam się foo
  • Ja przeciążenia foozfoo( string bar )
  • Tworzę przeciążoną metodę
  • Sprawiam, że foo jest przeciążone

Więc tak, ten rodzaj myślenia sprawił, że nie jestem pewien, co z tym zrobić. Istnieją setki, jeśli nie tysiące, opisów przeciążania funkcji w Internecie, ale na pierwszy rzut oka nie mogłem znaleźć rozwiązania tego problemu.


Chciałbym wiedzieć, dlaczego użyto do tego słowa przeciążenie. To nie wydaje się mieć sensu. Co jest ładowane? Jak jest ładowany ponownie lub nadmiernie?
Martin Maat,

@MartinMaat Czy przeczytałeś zaakceptowaną odpowiedź przez thiton i uprzejmie skomentowałeś ją? Wydaje się, że wykonują dobrą robotę, tłumacząc, co jest (przeładowane).
8bittree

Przeczytałem je, wyjaśniają pojęcie, a nie etomologię.
Martin Maat,

Odpowiedzi:


29

Mówiąc o przeciążeniach, nazwa funkcji jest przeciążona, a nie sama funkcja. Funkcje przeciążające nazwę to „przeciążenia” i przeciążenie nazwy, ale nie wzajemnie. W przykładzie, "public void foo()"i "public void foo( string bar )"oba przeciążać nazwę „foo”. Dlatego nie można mówić o przeciążeniu i przeciążeniu jednej z funkcji, ponieważ nie mają one bezpośredniego związku.

W swoich przykładach możesz powiedzieć, że przeciążasz „foo” (nazwa) za pomocą „foo (pasek ciągów)” (funkcja), ale nie możesz powiedzieć, że tworzysz przeciążoną metodę, ponieważ metody nigdy nie są przeciążone. Możesz powiedzieć, że tworzysz metodę przeciążania. Sformułowanie „powodowanie przeciążenia foo” to po prostu gorszy sposób powiedzenia „przeciążanie foo”.


Ale czy wtedy nie każda funkcja przeciążałaby swoją nazwę, nawet jeśli żadna inna funkcja nie ma takiej samej?
lewo około

Zgadzam się z tym jako odpowiedzią na powyższe pytanie ogólne. Ale jeśli jedna wywołała jedną z funkcji od drugiej, to dostrzegam sens, w którym jedna przeciąża drugą.
Joshua Drake

3
@leftaroundabout: „Przeciążenie” oznacza, że ​​wykonujesz więcej „ładowania” niż zwykle, więc ten termin jest używany tylko wtedy, gdy masz więcej niż jedną funkcję o tej samej nazwie.
uprzejmie

Uzgodniony z @kindall; słowo „przeciążenie” w kontekście rozwoju oprogramowania oznacza „przypisać więcej niż jedno znaczenie”; przeciążanie kolumn w DB (znaczenie zależy od innych pól), przeciążanie parametrów (znaczenie zależy od innych parametrów) itp. Jedna metoda nie przeciąża żadnej innej, ale jeśli istnieje więcej niż jedna metoda o jednej nazwie , nazwa to „ przeciążony ".
KutuluMike,

15

Powiedziałbym po prostu, że foojest przeciążony. Z pewnością nie ma tu miejsca związek pan / niewolnik lub rodzic / dziecko.


2
Zgadzam się - to nazwa metody lub operatora, która jest przeciążona, a nie sama metoda. Nie należy mylić z nadpisywaniem , gdy implementacja danej metody w podklasie zastępuje implementację w klasie nadrzędnej.
Caleb

1
Ja też się z tym zgadzam, ale myślę, że Thiton lepiej to wyjaśnia. Dziękuję za Twoją odpowiedź !
Willem D'Haeseleer

3

Myślę, że dobrym sposobem na wyrażenie tego jest skupienie się na końcowym wyniku, a nie na zmianach wprowadzonych w klasie w miarę upływu czasu. Dlatego zamiast mówić „przeładowałem„ foo ”za pomocą„ foo (inne parametry) ”,„ mówisz ”foo to funkcja przeciążona, za pomocą„ foo () ”i„ foo (inne parametry) ”.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.