Partager via


Surcharge de procédure (Visual Basic)

Surcharger une procédure signifie la définir dans plusieurs versions, à l’aide du même nom mais de listes de paramètres différentes. L’objectif de la surcharge est de définir plusieurs versions étroitement liées d’une procédure sans avoir à les différencier par leur nom. Pour ce faire, vous pouvez varier la liste des paramètres.

Règles de surcharge

Lorsque vous surchargez une procédure, les règles suivantes s’appliquent :

  • Même nom. Chaque version surchargée doit utiliser le même nom de procédure.

  • Signature différente. Chaque version surchargée doit différer de toutes les autres versions surchargées dans au moins l’un des aspects suivants :

    • Nombre de paramètres

    • Ordre des paramètres

    • Types de données des paramètres

    • Nombre de paramètres de type (pour une procédure générique)

    • Type de retour (uniquement pour un opérateur de conversion)

    Avec le nom de la procédure, les éléments précédents sont collectivement appelés signature de la procédure. Lorsque vous appelez une procédure surchargée, le compilateur utilise la signature pour vérifier que l’appel correspond correctement à la définition.

  • Éléments qui ne font pas partie de la signature. Vous ne pouvez pas surcharger une procédure sans modifier la signature. En particulier, vous ne pouvez pas surcharger une procédure en variant un ou plusieurs des éléments suivants :

    • Mots clés de modificateur de procédure, tels que Public, Sharedet Static

    • Noms de paramètres de paramètre ou de type

    • Contraintes de paramètre de type (pour une procédure générique)

    • Mots clés de modificateur de paramètres, tels que ByRef et Optional

    • Indique si elle retourne une valeur

    • Type de données de la valeur de retour (à l’exception d’un opérateur de conversion)

    Les éléments de la liste précédente ne font pas partie de la signature. Bien que vous ne puissiez pas les utiliser pour différencier les versions surchargées, vous pouvez les varier entre les versions surchargées qui sont correctement différenciées par leurs signatures.

  • argumentsLate-Bound. Si vous envisagez de passer une variable d’objet liée tardive à une version surchargée, vous devez déclarer le paramètre approprié en tant que Object.

Plusieurs versions d’une procédure

Supposons que vous écrivez une Sub procédure pour publier une transaction par rapport au solde d’un client et que vous souhaitez pouvoir faire référence au client par nom ou par numéro de compte. Pour ce faire, vous pouvez définir deux procédures différentes Sub , comme dans l’exemple suivant :

Sub postName(ByVal custName As String, ByVal amount As Single)
    ' Insert code to access customer record by customer name.
End Sub
Sub postAcct(ByVal custAcct As Integer, ByVal amount As Single)
    ' Insert code to access customer record by account number.
End Sub

Versions surchargées

Une alternative consiste à surcharger un nom de procédure unique. Vous pouvez utiliser le mot clé Overloads pour définir une version de la procédure pour chaque liste de paramètres, comme suit :

Overloads Sub post(ByVal custName As String, ByVal amount As Single)
    ' Insert code to access customer record by customer name.
End Sub
Overloads Sub post(ByVal custAcct As Integer, ByVal amount As Single)
    ' Insert code to access customer record by account number.
End Sub

Surcharges supplémentaires

Si vous souhaitez également accepter un montant de transaction dans l’une ou l’autre Decimal , Singlevous pouvez post surcharger davantage pour permettre cette variation. Si vous l’avez fait pour chacune des surcharges de l’exemple précédent, vous avez quatre Sub procédures, avec le même nom, mais avec quatre signatures différentes.

Avantages de la surcharge

L'avantage de la surcharge d'une procédure réside dans la flexibilité de l'appel. Pour utiliser la post procédure déclarée dans l’exemple précédent, le code appelant peut obtenir l’identification du client sous la forme d’un ou d’un StringInteger, puis appeler la même procédure dans les deux cas. L'exemple suivant illustre ce mécanisme :

Imports MSVB = Microsoft.VisualBasic
Dim customer As String
Dim accountNum As Integer
Dim amount As Single
customer = MSVB.Interaction.InputBox("Enter customer name or number")
amount = MSVB.Interaction.InputBox("Enter transaction amount")
Try
    accountNum = CInt(customer)
    Call post(accountNum, amount)
Catch
    Call post(customer, amount)
End Try

Voir aussi