Procedure Overloading (Visual Basic)

 

Pour la documentation la plus récente de Visual Studio 2017 RC, consultez Documentation RC de Visual Studio 2017.

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.

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.

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.

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

Procedures
How to: Define Multiple Versions of a Procedure
How to: Call an Overloaded Procedure
How to: Overload a Procedure that Takes Optional Parameters
How to: Overload a Procedure that Takes an Indefinite Number of Parameters
Considerations in Overloading Procedures
Overload Resolution
Overloads
Types génériques Visual Basic

Afficher: