In Visual Basic stelt methodenoverbelasting (overloading) je in staat om meerdere methoden met dezelfde naam te creëren, maar met verschillende parameters (types, aantallen, volgorde). Voor overbelasting wordt het sleutelwoord Overloads gebruikt vóór de declaratie van de methode. Dit helpt om de interface van de klasse flexibeler en handiger te maken, waardoor dezelfde methode met verschillende parameterverzamelingen kan worden gebruikt. Overriding (overriding) daarentegen is gerelateerd aan overerving en stelt je in staat om in een afgeleide klasse de implementatie van een methode van de basisklasse te wijzigen; hiervoor worden de sleutelwoorden Overrides (in de afgeleide klasse) en Overridable (in de basisklasse) gebruikt.
Voorbeeld van methodenoverbelasting:
Class MathUtil ' Overbelasting voor de som van twee gehele getallen Public Overloads Function Add(a As Integer, b As Integer) As Integer Return a + b End Function ' Overbelasting voor de som van drie gehele getallen Public Overloads Function Add(a As Integer, b As Integer, c As Integer) As Integer Return a + b + c End Function ' Overbelasting voor de som van twee drijvende getallen Public Overloads Function Add(a As Double, b As Double) As Double Return a + b End Function End Class
Vraag: "Is het mogelijk om procedures en functies te overbelasten op basis van het type retourwaarde? Waarom?"
Antwoord: Nee, in Visual Basic is methodenoverbelasting alleen toegestaan op basis van de parameterverzameling (type, aantal, volgorde). Overbelasting op basis van het type teruggevraagd resultaat is niet mogelijk: als de handtekeningen van de methoden alleen verschillen in het resultaat type, zal er een compilatiefout optreden.
Voorbeeld:
' Dit zal een compilatiefout veroorzaken! Overloads Function Foo(x As Integer) As Integer End Function Overloads Function Foo(x As Integer) As String End Function
Verhaal
In een internetbankierproject implementeerde een ontwikkelaar gebruikersvalidatiemethoden via overbelasting, maar koos alleen verschillen op basis van het teruggegeven type resultaat (bijvoorbeeld, de ene retourneerde Boolean, de andere String voor een foutmelding). Dit leidde tot ambiguïteit in het aanroepen van de methode, compilatiefouten, en het team moest snel de interface corrigeren, wat de release vertraagde.
Verhaal
In een bedrijfsysteem voor voorraadbeheer probeerden ze een overbelaste methode AddItem te maken, door te variëren op basis van het type resultaat (bijvoorbeeld, één — resultaat van toevoeging, de tweede — ID van de toegevoegde record). Na integratie met een externe API stopten de tests met compileren, omdat de taal deze overbelasting niet ondersteunde, en de architectuur van de interactie moest volledig herzien worden.
Verhaal
In een oud project voor de verwerking van wetenschappelijke gegevens probeerden ze een functie te overbelasten op basis van het retourtype (één Double, de andere Decimal). De oproepinstanties waren ononderscheidbaar voor de compiler, wat leidde tot onverwachte runtime-fouten en dubbele werk voor het corrigeren van de bibliotheekinterface.