Partager via


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é dans une classe portant le même nom, mais des 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 qui fonctionnent sur différents types de données. Par exemple, une classe qui peut afficher plusieurs types de données différents peut avoir Display des procédures 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 surcharger, vous devez créer des noms distincts pour chaque procédure, même s’ils 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 de 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 fonctionnalité de différenciation lors de la surcharge d’une propriété ou d’une procédure :

  • 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 Overloads mot clé est facultatif lors de la surcharge, mais si un membre surchargé utilise le Overloads mot clé, tous les autres membres surchargés portant le même nom doivent également spécifier ce mot clé.

Les classes dérivées peuvent surcharger les membres hérités avec des membres possédant des paramètres et des types de paramètres identiques, un processus appelé masquage par nom et signature. Si le mot clé Overloads est utilisé lors de l’occultation 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é par un autre membre ayant des paramètres et types de paramètres identiques, la surcharge est alors appelée occultation par nom. L’occultation 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 tous les deux avec la même propriété ou méthode.

Exemple :

L’exemple suivant crée des méthodes surchargées qui acceptent soit une représentation d’un String montant en dollars soit un Decimal 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 ShowTax procédure à 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 surchargée ShowTax .

Au moment de l’exécution, le compilateur choisit 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 qui est une Price chaîne et le message « Price is a String . Le texte « L’impôt est de 5,12 $ » est affiché. TaxAmount est appelé une deuxième fois avec une valeur Decimal et le message « Le prix est un décimal. » Le texte « L’impôt est de 5,12 $ » est affiché.

Voir aussi