Propriétés et méthodes surchargées (Visual Basic)

La surcharge est la création de plusieurs procédures, constructeurs d’instance ou propriétés dans une classe portant le même nom, mais de types d’arguments différents.

Utilisation de la surcharge

La surcharge est particulièrement utile lorsque votre modèle objet détermine que vous utilisez des noms identiques pour les procédures fonctionnant sur différents types de données. Par exemple, une classe affichant plusieurs types de données différents peut avoir des procédures Display qui ressemblent à ceci :

Overloads Sub Display(ByVal theChar As Char)
    ' Add code that displays Char data.
End Sub
Overloads Sub Display(ByVal theInteger As Integer)
    ' Add code that displays Integer data.
End Sub
Overloads Sub Display(ByVal theDouble As Double)
    ' Add code that displays Double data.
End Sub

Sans surcharge, vous devez créer des noms distincts pour chaque procédure, même si elles font la même chose, comme indiqué ci-dessous :

Sub DisplayChar(ByVal theChar As Char)
    ' Add code that displays Char data.
End Sub
Sub DisplayInt(ByVal theInteger As Integer)
    ' Add code that displays Integer data.
End Sub
Sub DisplayDouble(ByVal theDouble As Double)
    ' Add code that displays Double data.
End Sub

La surcharge facilite l’utilisation de propriétés ou méthodes, car elle offre un choix de types de données qui peuvent être utilisés. Par exemple, la méthode surchargée Display décrite précédemment peut être appelée avec l’une des lignes de code suivantes :

' Call Display with a literal of type Char.
Display("9"c)
' Call Display with a literal of type Integer.
Display(9)
' Call Display with a literal of type Double.
Display(9.9R)

Au moment de l’exécution, Visual Basic appelle la procédure correcte en fonction des types de données des paramètres que vous spécifiez.

Règles de surcharge

Vous créez un membre surchargé pour une classe en ajoutant au moins deux propriétés ou méthodes portant le même nom. À l'exception des membres dérivés surchargés, chaque membre surchargé doit avoir des listes de paramètres différentes, et les éléments suivants ne peuvent pas être utilisés comme élément de différenciation lors de la surcharge d'une propriété ou d'une procédure :

  • Les modificateurs, tels que ByVal ou ByRef, qui s’appliquent à un membre ou à des paramètres du membre.

  • Noms des paramètres

  • Types de procédures de retour

Le mot-clé Overloads est facultatif lors de la surcharge, mais si un membre surchargé utilise le mot-clé Overloads, tous les autres membres surchargés portant le même nom devront également spécifier ce mot-clé.

Les classes dérivées peuvent surcharger les membres hérités avec des membres ayant des paramètres ou des types de paramètres identiques, un processus appelé shadowing par nom et signature. Si le mot-clé Overloads est utilisé lors du shadowing par nom et signature, l’implémentation de la classe dérivée du membre sera utilisée au lieu de l’implémentation dans la classe de base, et toutes les autres surcharges pour ce membre seront disponibles pour les instances de la classe dérivée.

Si le mot-cléOverloads est omis lors de la surcharge d’un membre hérité avec un membre ayant des paramètres ou types de paramètres identiques, la surcharge est appelée shadowing par nom. Le shadowing par nom remplace l’implémentation héritée d’un membre et rend toutes les autres surcharges indisponibles pour les instances de la classe dérivée et ses descendants.

Les modificateurs Overloads et Shadows ne peuvent pas être utilisés avec la même propriété ou la même méthode.

Exemple

L’exemple suivant crée des méthodes surchargées qui acceptent une représentation String ou Decimal d’un montant en dollars et retournent une chaîne contenant la taxe de vente.

Pour utiliser cet exemple afin de créer une méthode surchargée

  1. Ouvrez un nouveau projet et ajoutez une classe nommée TaxClass.

  2. Ajoutez le code suivant à la classe TaxClass .

    Public Class TaxClass
        Overloads Function TaxAmount(ByVal decPrice As Decimal,
             ByVal TaxRate As Single) As String
            TaxAmount = "Price is a Decimal. Tax is $" &
               (CStr(decPrice * TaxRate))
        End Function
    
        Overloads Function TaxAmount(ByVal strPrice As String,
              ByVal TaxRate As Single) As String
            TaxAmount = "Price is a String. Tax is $" &
               CStr((CDec(strPrice) * TaxRate))
        End Function
    End Class
    
  3. Ajoutez la procédure suivante à votre formulaire.

    Sub ShowTax()
        ' 8% tax rate.
        Const TaxRate As Single = 0.08
        ' $64.00 Purchase as a String.
        Dim strPrice As String = "64.00"
        ' $64.00 Purchase as a Decimal.
        Dim decPrice As Decimal = 64
        Dim aclass As New TaxClass
        'Call the same method with two different kinds of data.
        MsgBox(aclass.TaxAmount(strPrice, TaxRate))
        MsgBox(aclass.TaxAmount(decPrice, TaxRate))
    End Sub
    
  4. Ajoutez un bouton à votre formulaire et appelez la procédure ShowTax à partir de l’événement Button1_Click du bouton.

  5. Exécutez le projet et cliquez sur le bouton du formulaire pour tester la procédure ShowTax surchargée.

Au moment de l’exécution, le compilateur choisira la fonction surchargée appropriée, qui correspond aux paramètres utilisés. Lorsque vous cliquez sur le bouton, la méthode surchargée est appelée en premier avec un paramètre Pricequi est une chaîne, et le message « Price est une chaîne. L’impôt est de 5,12 $ » s’affiche. La deuxième fois, TaxAmount est appelé avec une valeur Decimal, et le message « Prix est une décimale. L’impôt est de 5,12 $ » s’affiche.

Voir aussi