-
overloads (vs 2005)
bjour
considérons 2 fonctions avec des paramètres différents
que je mette overloads devant ou non, ça fait la même chose (possibilité de lancer l'une ou l'autre selon les paramètres)
quelle est alors l'utilité de mettre overloads, y a-t-il une nuance ?
merci
-
salut
J'ai fait 2-3 petits tests et regarde un peu sur le net, selon toute vraissemblance, Overloads est facultatif
Cependant quand tu commence a avoir une pyramide de classes heritees saupoudrees de generiques, t'est bien content que VB les mette automatiquement :)
PS: il faut mettre Overloads uniquement si il a deja ete explicitement mis une fois pour une autre methode
-
Bonjour
VB 2005 fournit le mot clé Overloads, qui peut être utilisé quand on veut explicitement marquer un membre comme surchargé (Overloded). L’utilisation de ce mot clé est complétement optionnel. Le compilateur assume que vous surcharger un membre (méthode par exemple) s’il trouve des méthodes avec un nom identique et avec des arguments différents :
Public Overloads Function Ajouter(ByVal x As Integer, ByVal y As Integer) As Integer
Return x + y
End Function
Public Overloads Function Ajouter(ByVal x As Double, ByVal y As Double) As Double
Return x + y
End Function
Public Overloads Function Ajouter(ByVal x As Long, ByVal y As Long) As Long
Return x + y
End Function*****
A noter lorsque vous surcharger une méthode :
- Si, le seul point de différence entre 2 méthodes est ByVal/ByRef, ce n’est pas suffisant pour que la méthode puisse etre Overloded
Exemple : les méthodes suivantes engendrent une erreur !!!
Sub Methode1(ByVal aAs Integer)
End Sub
Sub Methode1 (ByRef aAs Integer)
End Sub
- Egalement, si une méthode est surchargée seulement par des arguments marqués Optional, vous allez recevoir une erreur !!:
Sub Methode1(ByVal aAs Integer)
End Sub
Sub Methode1 (ByVal aAs Integer, Optional ByVal b As Integer = 0)
End Sub
La raison pour laquelle le compilateur refuse de permettre ce surchargement (this overload) est due au fait qu’il ne peut enlever l’ambiguité dans ce code suivant :
Sub Main()
...
' Est-ce que vous appellez la méthode avec un seul argument ou celle avec deux arguments et negliger le second paramètre ?
Methode1(1)
End Sub