In Visual Basic erlaubt die Methodenüberladung (Overloading) das Erstellen mehrerer Methoden mit demselben Namen, jedoch unterschiedlichen Parametern (Typen, Anzahl, Reihenfolge). Für die Überladung wird das Schlüsselwort Overloads vor der Methodendeklaration verwendet. Dies hilft, die Schnittstelle der Klasse flexibler und benutzerfreundlicher zu gestalten, indem man dieselbe Methode mit unterschiedlichen Parametergruppen verwenden kann. Das Überschreiben (Overriding) hingegen bezieht sich auf die Vererbung und ermöglicht es, in einer abgeleiteten Klasse die Implementierung der Methode der Basisklasse zu ändern; dazu werden die Schlüsselwörter Overrides (in der abgeleiteten Klasse) und Overridable (in der Basisklasse) verwendet.
Beispiel für Methodenüberladung:
Class MathUtil ' Überladung für die Summe von zwei Ganzzahlen Public Overloads Function Add(a As Integer, b As Integer) As Integer Return a + b End Function ' Überladung für die Summe von drei Ganzzahlen Public Overloads Function Add(a As Integer, b As Integer, c As Integer) As Integer Return a + b + c End Function ' Überladung für die Summe von zwei Fließkommazahlen Public Overloads Function Add(a As Double, b As Double) As Double Return a + b End Function End Class
Frage: "Kann man Prozeduren und Funktionen nach dem Rückgabewert überladen? Warum?"
Antwort: Nein, in Visual Basic ist die Methodenüberladung nur nach der Parametergruppe (Typ, Anzahl, Reihenfolge) erlaubt. Eine Überladung basierend auf dem Rückgabetyp ist nicht möglich: wenn die Signaturen der Methoden nur durch den Rückgabetyp unterschiedlich sind, tritt ein Compilerfehler auf.
Beispiel:
' Dies wird einen Compilerfehler auslösen! Overloads Function Foo(x As Integer) As Integer End Function Overloads Function Foo(x As Integer) As String End Function
Geschichte
In einem Projekt für Online-Banking implementierte ein Entwickler Validierungsmethoden für Benutzer durch Überladung, wählte jedoch nur Unterschiede durch den Rückgabetyp (z. B. eine gibt Boolean zurück, die andere String für Fehlermeldungen). Dies führte zu Mehrdeutigkeit beim Methodenaufruf, zu Kompilierungsfehlern, und das Team musste die Schnittstelle dringend korrigieren, was den Release verzögerte.
Geschichte
In einem Unternehmenssystem für Lagerbestände wurde versucht, eine überladene Methode AddItem zu erstellen, die sich nur durch den Rückgabetyp unterschied (z. B. eine — Ergebnis der Hinzufügung, die andere — ID des hinzugefügten Datensatzes). Nach der Integration mit einer externen API konnten die Tests nicht mehr kompiliert werden, da die Sprache eine solche Überladung nicht unterstützt, und es musste die gesamte Architektur der Interaktion überarbeitet werden.
Geschichte
In einem alten Projekt zur Verarbeitung von wissenschaftlichen Daten wurde versucht, eine Funktion nach dem Rückgabewert zu überladen (eine Double, die andere Decimal). Die Instanzen des Aufrufs waren für den Compiler nicht unterscheidbar, was zu unerwarteten Laufzeitfehlern und doppelter Arbeit zur Korrektur der Bibliotheksschnittstelle führte.