Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
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
ouByRef
, 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
Ouvrez un nouveau projet et ajoutez une classe nommée
TaxClass
.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
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
Ajoutez un bouton à votre formulaire et appelez la
ShowTax
procédure à partir de l’événementButton1_Click
du bouton.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é.