Surcharge de procédure (Visual Basic)Procedure Overloading (Visual Basic)

La surcharge d’une procédure signifie la définir dans plusieurs versions, en utilisant le même nom mais des listes de paramètres différentes.Overloading a procedure means defining it in multiple versions, using the same name but different parameter lists. 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.The purpose of overloading is to define several closely related versions of a procedure without having to differentiate them by name. Pour ce faire, vous devez faire varier la liste de paramètres.You do this by varying the parameter list.

Surcharge des règlesOverloading Rules

Lorsque vous surchargez une procédure, les règles suivantes s’appliquent :When you overload a procedure, the following rules apply:

  • Même nom.Same Name. Chaque version surchargée doit utiliser le même nom de procédure.Each overloaded version must use the same procedure name.

  • Signature différente.Different Signature. Chaque version surchargée doit être différente de toutes les autres versions surchargées dans au moins l’un des aspects suivants :Each overloaded version must differ from all other overloaded versions in at least one of the following respects:

    • Nombre de paramètresNumber of parameters

    • Ordre des paramètresOrder of the parameters

    • Types de données des paramètresData types of the parameters

    • Nombre de paramètres de type (pour une procédure générique)Number of type parameters (for a generic procedure)

    • Type de retour (uniquement pour un opérateur de conversion)Return type (only for a conversion operator)

    Avec le nom de la procédure, les éléments précédents sont appelés collectivement la signature de la procédure.Together with the procedure name, the preceding items are collectively called the signature of the procedure. Quand vous appelez une procédure surchargée, le compilateur utilise la signature pour vérifier que l’appel correspond correctement à la définition.When you call an overloaded procedure, the compiler uses the signature to check that the call correctly matches the definition.

  • Éléments ne faisant pas partie de la signature.Items Not Part of Signature. Vous ne pouvez pas surcharger une procédure sans faire varier la signature.You cannot overload a procedure without varying the signature. En particulier, vous ne pouvez pas surcharger une procédure en faisant varier un ou plusieurs des éléments suivants :In particular, you cannot overload a procedure by varying only one or more of the following items:

    • Mots clés de modificateur de procédure, tels que Public, Sharedet StaticProcedure modifier keywords, such as Public, Shared, and Static

    • Noms de paramètre ou de paramètre de typeParameter or type parameter names

    • Contraintes de paramètre de type (pour une procédure générique)Type parameter constraints (for a generic procedure)

    • Mots clés de modificateur de paramètre, tels que ByRef et OptionalParameter modifier keywords, such as ByRef and Optional

    • Si elle retourne une valeurWhether it returns a value

    • Type de données de la valeur de retour (à l’exception d’un opérateur de conversion)The data type of the return value (except for a conversion operator)

    Les éléments de la liste précédente ne font pas partie de la signature.The items in the preceding list are not part of the signature. Même si vous ne pouvez pas les utiliser pour différencier les versions surchargées, vous pouvez les faire varier parmi les versions surchargées qui sont correctement différenciées par leurs signatures.Although you cannot use them to differentiate between overloaded versions, you can vary them among overloaded versions that are properly differentiated by their signatures.

  • Arguments à liaison tardive.Late-Bound Arguments. Si vous envisagez de passer une variable objet à liaison tardive à une version surchargée, vous devez déclarer le paramètre approprié comme Object.If you intend to pass a late bound object variable to an overloaded version, you must declare the appropriate parameter as Object.

Plusieurs versions d’une procédureMultiple Versions of a Procedure

Supposons que vous écriviez une procédure de Sub pour envoyer une transaction au solde d’un client et que vous souhaitez être en mesure de faire référence au client par son nom ou par son numéro de compte.Suppose you are writing a Sub procedure to post a transaction against a customer's balance, and you want to be able to refer to the customer either by name or by account number. Pour ce faire, vous pouvez définir deux procédures de Sub différentes, comme dans l’exemple suivant :To accommodate this, you can define two different Sub procedures, as in the following example:

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éesOverloaded Versions

Une alternative consiste à surcharger un nom de procédure unique.An alternative is to overload a single procedure name. Vous pouvez utiliser le mot clé Overloads pour définir une version de la procédure pour chaque liste de paramètres, comme suit :You can use the Overloads keyword to define a version of the procedure for each parameter list, as follows:

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émentairesAdditional Overloads

Si vous souhaitez également accepter un montant de transaction dans Decimal ou Single, vous pouvez surcharger post pour permettre cette variation.If you also wanted to accept a transaction amount in either Decimal or Single, you could further overload post to allow for this variation. Si vous l’avez fait pour chacune des surcharges de l’exemple précédent, vous avez quatre Sub procédures, toutes avec le même nom, mais avec quatre signatures différentes.If you did this to each of the overloads in the preceding example, you would have four Sub procedures, all with the same name but with four different signatures.

Avantages de la surchargeAdvantages of Overloading

L’avantage de la surcharge d’une procédure est de la flexibilité de l’appel.The advantage of overloading a procedure is in the flexibility of the call. Pour utiliser la procédure post 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.To use the post procedure declared in the preceding example, the calling code can obtain the customer identification as either a String or an Integer, and then call the same procedure in either case. L'exemple suivant illustre ce comportement :The following example illustrates this:

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 aussiSee also