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
ouByRef
, 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
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 procédure
ShowTax
à partir de l’événementButton1_Click
du bouton.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 Price
qui 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.