Surcharge de procédure

Mise à jour : novembre 2007

La surcharge d'une procédure consiste à définir celle-ci en plusieurs versions, à l'aide du même nom, mais avec des listes de paramètres différentes. La finalité d'une surcharge est de définir plusieurs versions de procédures étroitement liées sans avoir à les différencier par nom. Pour ce faire, vous devez faire 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 être différente de toutes les autres versions surchargées sur au moins l'un des points 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 procédure, les éléments précédents sont appelés collectivement 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 bien à la définition.

  • Éléments ne faisant pas partie de la signature. Vous ne pouvez pas surcharger une procédure sans faire varier la signature. En particulier, vous ne pouvez pas surcharger une procédure en faisant varier uniquement un ou plusieurs des éléments suivants :

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

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

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

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

    • S'il 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 des versions surchargées, vous pouvez les faire varier parmi des versions surchargées qui sont correctement différenciées par leurs signatures.

  • Arguments à liaison tardive. Si vous essayez de passer une variable objet à liaison tardive à une procédure surchargée, vous devez déclarer le paramètre approprié comme Object.

Versions multiples d'une procédure

Supposons que vous écriviez une procédure Sub pour publier une transaction relative au solde d'un client, et que vous vouliez faire référence au client par son nom ou son 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

La première solution consiste à surcharger un seul nom de procédure. 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 voulez également accepter le montant d'une transaction sous forme d'un type Decimal ou Single, vous pouvez surcharger davantage post pour permettre cette variation. Si vous avez effectué cette opération sur chacune des surcharges de l'exemple précédent, vous devez obtenir quatre procédures Sub portant toutes le même nom, mais avec quatre signatures différentes.

Avantages de la surcharge

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

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

Tâches

Comment : définir plusieurs versions d'une procédure

Comment : appeler une procédure surchargée

Comment : surcharger une procédure qui accepte des paramètres optionnels

Comment : surcharger une procédure qui accepte un nombre indéfini de paramètres

Concepts

Procédures dans Visual Basic

Considérations sur les surcharges de procédures

Résolution de surcharge

Types génériques en Visual Basic

Référence

Overloads