Surcharge de procédure (Visual Basic)

Surcharger une procédure signifie la définir dans plusieurs versions, en utilisant le même nom, mais des 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 nom. Pour ce faire, faites varier la liste de 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 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 une procédure d'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 varier la signature. Vous ne pouvez pas surcharger une procédure en variant un ou plusieurs des éléments précédents :

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

    • Noms de paramètre de type ou argument 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

    • S’il retourne une valeur

    • Le type de données de la valeur de retour (sauf pour 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 faire varier entre les versions surchargées qui sont correctement différenciées par leurs signatures.

  • Argument de liaison tardive. Si vous envisagez de passer une variable d’objet liée tardivement à 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 écriviez une procédure Sub pour publier une transaction sur le solde d’un client et que vous souhaitiez 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 Sub différentes, 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é Surcharges 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 Decimal ou Single, vous pourriez surcharger post davantage pour autoriser cette variation. Si vous le faisiez pour chacune des surcharges de l’exemple précédent, vous auriez quatre procédures Sub, toutes portant le même nom, mais avec quatre signatures différentes.

Avantages de la surcharge

L’avantage de surcharger une procédure est 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 String ou d’un Integer, 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