|
Site |
Cours VB.net |
|
|
|
Surcharge. |
|
|
Quand on utilise une méthode avec des paramètres, il y a parfois possibilité d'utiliser, avec la même méthode, un nombre différent de paramètres ou des paramètres de nature différente: on appelle cela surcharger la méthode.
Chaque manière d'écrire les paramètres s'appelle une signature.
Exemple:
Voici une fenêtre MessageBox:
pour ouvrir une fenêtre MessageBox il y a 12 signatures, en voici 2:
Reponse= MessageBox.show(TexteAAfficher,Titre, TypeBouton etIcone, BoutonParDéfaut)
Ici on donne 4 paramètres.
Reponse= MessageBox.show(TexteAAfficher)
Ici 1 seul paramètre.
On voit qu'on peut appeler la méthode MessageBox.Show avec un nombre différent de paramètres.
Comme on ne peut pas connaître toutes les signatures, VB nous aide:
Si on tape R= MessageBox.show( VB affiche dans un cadre une signature, de petites flèches permettent de faire défiler tous les autres signatures:
Quand on crée une Classe, il est bien sur possible d'écrire une property ou un constructeur qui accepte la surcharge:
Surcharge en VB 2003
1- On peut surcharger un constructeur.
Pour cela il suffit de rajouter autant de procédure New que l'on veut avec pour chacune un nombre de paramètre différent (signatures différentes).
Exemple: On peut surcharger un constructeur:
Class Figure
Sub New()
Bla Bla
End Sub
Sub New( ByVal X As Integer, ByVal Y As Integer)
Blabla
End Sub.
End Class
On peut donc instancier la classe correspondante de 2 manières:
Dim A As New Figure 'Constructeur par défaut
ou
Dim A As New Figure(100,150)
2- On peut surcharger une property.
Pour cela il suffit de rajouter des procédure Property ayant le même nom de méthode avec pour chacune un nombre de paramètre différent (signature différente)
On peut ajouter Overloads mais c'est facultatif.
Exemple: surchargeons un membre:
Class Figure
Public Overloads Property Calcul()
Bla Bla
End Sub
Public Overloads Property Calcul( ByVal X As Integer, ByVal Y As Integer)
Blabla
End Sub.
End Class
c'est un bon exemple de polymorphisme.
Surcharge en VB 2005: nouveautés
On peut surcharger les opérateurs + - * / mais aussi _ ^ & Like And Or Xor Not < > = << >> Ctype IsTrue, IsFalse
Exemple: surchargeons l'opérateur +Public Structure height ... Public Shared Operator +(ByVal h1 As height, ByVal h2 As height)As height Return New height(h1.feet + h2.feet, h1.inches + h2.inches) End Operator End Structure
La routine doit être Shared, de plus si on surcharge certains opérateurs, il faut aussi surcharger leur inverse: si on surcharge '>' , il faut surcharger '<'.
Surcharge de IsTrue, IsFalse Ctype
Si on teste un boolean, il a la valeur True ou False.
Si par contre je crée une classe nommée 'Personne', je peux définir comment une instance sera considérée comme égale à True. Il faut surcharger l'opérateur IsTrue en lui indiquant dans quelle condition l'instance sera considérée comme =True:
Exemple:
J'ai une instance e de type Personne, si e.Present =True, dans ce cas je veux que e soit considéré comme True; il faut écrire dans la Classe 'personne':
Public Shared Operator IsTrue(ByVal e As Personne) As Boolean
If e Is Nothing Then
Return False
Else
Return e.Present
End If
End Operator
Pour définir l'opérateur IsFalse, c'est simple: c'est Not e
Public Shared Operator IsFalse(ByVal e As Personne) As Boolean
Return Not e
End Operator
Ensuite je pourrais utiliser des instructions de la forme:
If e then..
Surcharge de Ctype:
Je peux définir dans une classe comment CType va fonctionner:
Pour cela dans la classe Personne, je vais définir les 3 possibilités:
Public Shared Widening Operator CType(ByVal e As Personne) As String
Return e.Nom + " " + e.Prenom
End Operator
Public Shared Widening Operator CType(ByVal e As Personne) As Date
If e Is Nothing Then
Return Nothing
Else
Return e.DateDeNaissance
End If
End Operator
Public Shared Widening Operator CType(ByVal e As Personne) As Boolean
If e Is Nothing Then Return False Else Return e.Present
End Operator
Ainsi
Ctype(UnePersonne,String) retourne Nom Prenon
Ctype(UnePersonne,Date) retourne la date de naissance
Ctype(UnePersonne,Boolean) retourne True ou False.
Les exemples sont des surcharges, car le type des paramètres est modifié.
|
|
|
|
|