Überlädt eine Methode eine andere oder sind beide Methoden „überladen“?

13

Wenn ich diese Methode erstelle

public void foo()

Und dann erstelle ich so eine überladene Version

public void foo( string bar )

Sagen wir, dass die zweite Funktion die erste überlastet, oder sind beide Methoden gleichermaßen "überlastet"?

Dies würde implizieren (ich denke), dass es eine Basistypfunktion gibt, die von einer anderen Funktion überladen wird (etwas wie Vererbung, aber nicht wirklich).

Unter der Annahme, dass eine Methode eine andere "überlasten" kann, würde dies auch Ausdrücke wie "Überlader" und "Überlader" implizieren, wenn dies überhaupt ein Wort ist. Aber das fühlt sich überhaupt nicht richtig an, zumal Sie mehrere Überladungen haben können.

Ich kam auf diese Frage, als ich den Prozess des Erstellens einer überladenen Methode aufschreiben wollte, und ich wollte die korrekteste Art, sie aufzuschreiben.

Beispiele:

  • Ich überlaste foo
  • Ich überlade foomitfoo( string bar )
  • Ich erstelle eine überladene Methode
  • Ich mache foo überlastet

Also ja, diese Art brachte mich zum Nachdenken, ich bin nicht sicher, was ich davon halten soll. Es gibt hunderte, wenn nicht tausende Beschreibungen von Funktionsüberlastungen im Internet, aber auf den ersten Blick konnte ich keine finden, die sich damit befassen.

Willem D'Haeseleer
quelle
Ich würde gerne wissen, warum das Wort Überladung dafür verwendet wurde. Es scheint keinen Sinn zu ergeben. Was wird geladen? Wie wird es erneut oder übermäßig geladen?
Martin Maat
@MartinMaat Hast du die akzeptierte Antwort von thiton und kindalls Kommentar dazu gelesen ? Sie scheinen gut zu erklären, was (über) geladen wird.
8bittree
Ich habe die gelesen, sie erklären das Konzept, nicht die Ethomologie.
Martin Maat

Antworten:

29

Wenn von Überladungen die Rede ist, ist der Name der Funktion überladen, nicht die Funktion selbst. Die Funktionen, die den Namen überladen, sind "Überladungen" und überladen den Namen, aber nicht einander. In Ihrem Beispiel "public void foo()"und "public void foo( string bar )"Überlastung sowohl den Namen „foo“. Daher können Sie nicht in Bezug auf Überlader und Überlader einer der Funktionen sprechen, da sie keine direkte Beziehung haben.

In Ihren Beispielen können Sie sagen, dass Sie "foo" (den Namen) mit "foo (Zeichenfolge)" (die Funktion) überladen, aber Sie können nicht sagen, dass Sie eine überladene Methode erstellen, da Methoden niemals überladen werden. Sie können sagen, dass Sie eine Überladungsmethode erstellen. "Foo überladen" zu formulieren, ist nur eine schlechtere Art, "Foo überladen" zu sagen.

Thiton
quelle
Aber würde dann nicht jede Funktion ihren Namen überladen, auch wenn keine andere Funktion dieselbe hat?
Leftaroundabout
Ich stimme dem als Antwort auf die oben stehende allgemeine Frage zu. Aber wenn man eine der Funktionen von der anderen abruft, dann nehme ich einen Sinn wahr, in dem eine die andere überlastet.
Joshua Drake
3
@leftaroundabout: "Überladen" bedeutet, dass Sie mehr "Laden" als üblich ausführen. Der Begriff wird also nur verwendet, wenn Sie mehr als eine Funktion mit demselben Namen haben.
Kindall
Einverstanden mit @kindall; das Wort "Überlastung" in einem Softwareentwicklungskontext bedeutet "mehr als eine Bedeutung zuweisen"; Überladen von Spalten in einer Datenbank (die Bedeutung hängt von anderen Feldern ab), Überladen von Parametern (die Bedeutung hängt von anderen Parametern ab) usw. Eine Methode überlädt keine andere, aber wenn es mehr als eine Methode mit einem Namen gibt , lautet der Name " überladen".
KutuluMike
15

Ich würde einfach sagen, fooist überladen. Hier gibt es sicherlich keine Beziehung zwischen Master / Slave oder Eltern / Kind.

DeadMG
quelle
2
Zustimmen - es ist der Name der überladenen Methode oder des Operators, nicht die Methode selbst. Nicht zu verwechseln mit Überschreiben , wenn die Implementierung einer bestimmten Methode in einer Unterklasse die Implementierung in der übergeordneten Klasse ersetzt.
Caleb
1
Ich stimme dem auch zu, aber ich denke, Thiton kann es besser erklären. Vielen Dank für Ihre Antwort !
Willem D'Haeseleer
3

Ich denke, eine gute Möglichkeit, dies auszudrücken, besteht darin, sich auf das Endergebnis zu konzentrieren und nicht auf Änderungen, die im Laufe der Zeit an der Klasse vorgenommen wurden. Anstatt also "Ich habe 'foo' mit 'foo (andere Parameter)' überladen" zu sagen, sagen Sie "foo ist eine überladene Funktion mit 'foo ()' und 'foo (andere Parameter)'."

mjfgates
quelle