Propriétés et méthodes surchargées (Visual Basic)
La surcharge consiste à créer plusieurs procédures, constructeurs d'instance ou propriétés dans une classe avec le même nom, mais avec des types d'argument différents.
Utilisation de la surcharge
La surcharge est particulièrement utile lorsque votre modèle objet impose l'utilisation de noms identiques pour des procédures qui s'appliquent à des types de données différents. Par exemple, les procédures Display d'une classe pouvant afficher plusieurs types de données distincts peuvent se présenter comme suit :
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 chacune des procédures, même si celles-ci effectuent les mêmes tâches, comme le montre l'exemple suivant :
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 des propriétés ou des méthodes, car elle propose un choix de divers types de données disponibles. Par exemple, la méthode Display surchargée décrite ci-dessus peut être appelée par 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 spécifiés.
Règles de surcharge
Pour créer un membre surchargé d'une classe, ajoutez au moins deux propriétés ou méthodes portant le même nom. Hormis les membres dérivés surchargés, chaque membre surchargé doit posséder des listes distinctes de paramètres, et les éléments suivants ne peuvent pas être utilisés pour opérer une distinction lors de la surcharge d'une propriété ou d'une procédure :
modificateurs (par exemple ByVal ou ByRef) qui s'appliquent à un membre ou à des paramètres du membre ;
noms de paramètres ;
types de retour de procédures.
Le mot clé Overloads est facultatif lors de la surcharge, mais si un membre surchargé l'utilise, 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 dont les paramètres et les types de paramètre sont identiques ; ce processus porte le nom d'occultation par le nom et la signature. Si le mot clé Overloads est utilisé lors de l'occultation par le nom et la signature, l'implémentation de la classe dérivée du membre sera utilisée à la place de l'implémentation dans la classe de base, et toutes les autres surcharges de 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 dont les paramètres et les types de paramètre sont identiques, la surcharge est appelée l'occultation par le nom. L'occultation par le 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 méthode.
Exemple
L'exemple suivant crée des méthodes surchargées qui acceptent une valeur de type String ou Decimal correspondant à un montant en dollars et qui retournent une chaîne comportant le taux de T.V.A.
Pour utiliser cet exemple afin de créer une méthode surchargée
Ouvrez un nouveau projet et ajoutez une classe appelé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énement de bouton Button1_Click.
Exécutez le projet et cliquez sur le bouton du formulaire afin de tester la procédure surchargée ShowTax.
Au moment de l'exécution, le compilateur sélectionne la fonction surchargée adéquate qui correspond aux paramètres utilisés. Lorsque vous cliquez sur le bouton, la méthode surchargée est d'abord appelée avec un paramètre Price (une chaîne) ; le message "Price is a String. Tax is $5,12" s'affiche. La deuxième fois, TaxAmount est appelé avec une valeurDecimal et le message "Price is a Decimal. Tax is $5,12" s'affiche.
Voir aussi
Référence
Sub, instruction (Visual Basic)
Concepts
Éléments fondamentaux de l'héritage (Visual Basic)