Overwegingen bij overbelastingsprocedures (Visual Basic)
Wanneer u een procedure overbelast, moet u een andere handtekening gebruiken voor elke overbelaste versie. Dit betekent meestal dat elke versie een andere parameterlijst moet opgeven. Zie 'Different Signature' in Procedure Overloading voor meer informatie.
U kunt een Function
procedure overbelasten met een Sub
procedure en omgekeerd, mits ze verschillende handtekeningen hebben. Twee overbelastingen kunnen niet alleen verschillen in die ene heeft een retourwaarde en de andere niet.
U kunt een eigenschap op dezelfde manier overbelasten als u een procedure overbelast en met dezelfde beperkingen. U kunt een procedure echter niet overbelasten met een eigenschap of omgekeerd.
Alternatieven voor overbelaste versies
Soms hebt u alternatieven voor overbelaste versies, met name wanneer de aanwezigheid van argumenten optioneel is of het aantal variabele is.
Houd er rekening mee dat optionele argumenten niet noodzakelijkerwijs worden ondersteund door alle talen en dat parametermatrices zijn beperkt tot Visual Basic. Als u een procedure schrijft die waarschijnlijk wordt aangeroepen vanuit code die in een van verschillende talen is geschreven, bieden overbelaste versies de grootste flexibiliteit.
Overbelastingen en optionele argumenten
Wanneer de aanroepende code optioneel een of meer argumenten kan opgeven of weglaten, kunt u meerdere overbelaste versies definiëren of optionele parameters gebruiken.
Wanneer gebruikt u overbelaste versies?
In de volgende gevallen kunt u overwegen een reeks overbelaste versies te definiëren:
De logica in de procedurecode is aanzienlijk anders, afhankelijk van of de aanroepende code een optioneel argument levert of niet.
De procedurecode kan niet betrouwbaar testen of de aanroepende code een optioneel argument heeft opgegeven. Dit is bijvoorbeeld het geval als er geen mogelijke kandidaat is voor een standaardwaarde die de aanroepcode niet zou kunnen leveren.
Wanneer optionele parameters gebruiken
In de volgende gevallen kunt u de voorkeur geven aan een of meer optionele parameters:
- De enige vereiste actie wanneer de aanroepende code geen optioneel argument opgeeft, is door de parameter in te stellen op een standaardwaarde. In dat geval kan de procedurecode minder ingewikkeld zijn als u één versie met een of meer
Optional
parameters definieert.
Zie Optionele parameters voor meer informatie.
Overloads en ParamArrays
Wanneer de aanroepende code een variabel aantal argumenten kan doorgeven, kunt u meerdere overbelaste versies definiëren of een parametermatrix gebruiken.
Wanneer gebruikt u overbelaste versies?
In de volgende gevallen kunt u overwegen een reeks overbelaste versies te definiëren:
U weet dat de aanroepende code nooit meer dan een klein aantal waarden doorgeeft aan de parametermatrix.
De logica in de procedurecode verschilt aanzienlijk, afhankelijk van het aantal waarden dat de aanroepende code doorgeeft.
De aanroepende code kan waarden van verschillende gegevenstypen doorgeven.
Wanneer gebruikt u een parametermatrix?
In de volgende gevallen wordt u beter bediend door een ParamArray
parameter:
U kunt niet voorspellen hoeveel waarden de aanroepende code kan doorgeven aan de parametermatrix en dit kan een groot getal zijn.
De procedurelogica leent zich voor het herhalen van alle waarden die de aanroepende code doorgeeft en voert in wezen dezelfde bewerkingen uit op elke waarde.
Zie Parametermatrices voor meer informatie.
Impliciete overbelasting voor optionele parameters
Een procedure met een optionele parameter is gelijk aan twee overbelaste procedures, één met de optionele parameter en één zonder deze. U kunt een dergelijke procedure niet overbelasten met een parameterlijst die overeenkomt met een van deze. De volgende declaraties illustreren dit.
Overloads Sub q(ByVal b As Byte, Optional ByVal j As Long = 6)
' The preceding definition is equivalent to the following two overloads.
' Overloads Sub q(ByVal b As Byte)
' Overloads Sub q(ByVal b As Byte, ByVal j As Long)
' Therefore, the following overload is not valid because the signature is already in use.
' Overloads Sub q(ByVal c As Byte, ByVal k As Long)
' The following overload uses a different signature and is valid.
Overloads Sub q(ByVal b As Byte, ByVal j As Long, ByVal s As Single)
Voor een procedure met meer dan één optionele parameter is er een set impliciete overbelastingen die zijn aangekomen door logica die vergelijkbaar is met die in het voorgaande voorbeeld.
Impliciete overbelastingen voor een parameter ParamArray
De compiler beschouwt een procedure met een parameter ParamArray als een oneindig aantal overbelastingen, waarbij de aanroepende code als volgt verschilt van elkaar in wat de aanroepende code doorgeeft aan de parametermatrix:
Eén overbelasting voor wanneer de aanroepende code geen argument aan de
ParamArray
Eén overbelasting voor wanneer de aanroepende code een eendimensionale matrix van het
ParamArray
elementtype levertVoor elk positief geheel getal, één overbelasting voor wanneer de aanroepende code dat aantal argumenten levert, elk van het
ParamArray
elementtype
De volgende declaraties illustreren deze impliciete overbelastingen.
Overloads Sub p(ByVal d As Date, ByVal ParamArray c() As Char)
' The preceding definition is equivalent to the following overloads.
' Overloads Sub p(ByVal d As Date)
' Overloads Sub p(ByVal d As Date, ByVal c() As Char)
' Overloads Sub p(ByVal d As Date, ByVal c1 As Char)
' Overloads Sub p(ByVal d As Date, ByVal c1 As Char, ByVal c2 As Char)
' And so on, with an additional Char argument in each successive overload.
U kunt een dergelijke procedure niet overbelasten met een parameterlijst die een eendimensionale matrix gebruikt voor de parametermatrix. U kunt echter de handtekeningen van de andere impliciete overbelastingen gebruiken. De volgende declaraties illustreren dit.
' The following overload is not valid because it takes an array for the parameter array.
' Overloads Sub p(ByVal x As Date, ByVal y() As Char)
' The following overload takes a single value for the parameter array and is valid.
Overloads Sub p(ByVal z As Date, ByVal w As Char)
Typeloze programmering als alternatief voor overbelasting
Als u de aanroepende code wilt toestaan om verschillende gegevenstypen door te geven aan een parameter, is een alternatieve benadering het programmeren zonder typen. U kunt de schakeloptie Off
typecontrole instellen op met de Optie strikte instructie of de optie -optionstrict compiler. Vervolgens hoeft u het gegevenstype van de parameter niet te declareren. Deze aanpak heeft echter de volgende nadelen vergeleken met overbelasting:
Typeloze programmering produceert minder efficiënte uitvoeringscode.
De procedure moet testen voor elk gegevenstype dat verwacht te worden doorgegeven.
De compiler kan geen fout signaleert als de aanroepende code een gegevenstype doorgeeft dat de procedure niet ondersteunt.
Zie ook
- Procedures
- Procedureparameters en argumenten
- Procedures voor probleemoplossing
- Procedure: Meerdere versies van een procedure definiëren
- Procedure: Een overbelaste procedure aanroepen
- Procedure: Een procedure overbelasten die optionele parameters gebruikt
- Procedure: Een procedure overbelasten waarvoor een onbeperkt aantal parameters nodig is
- Oplossing van overbelasting
- Overbelastingen