_Fabien
Messages postés119Date d'inscriptionvendredi 17 novembre 2006StatutMembreDernière intervention28 avril 2008
-
22 févr. 2008 à 16:20
_Fabien
Messages postés119Date d'inscriptionvendredi 17 novembre 2006StatutMembreDernière intervention28 avril 2008
-
27 févr. 2008 à 16:26
Bonjour,
Voici ma classe, viendra après ma question :
Public Class Adresse
Private _nomVoie As String
Private _voieComplement As String 'Complement d'adresse : batiment, escalier, etc.
Private _codePostal As String
Private _ville As String
' PREMIER CONSTRUCTEUR
Public Sub New(ByVal _nomVoie As String, _
ByVal _voieComplement As String, _
ByVal _codePostal As String, _
ByVal _ville As String)
Me._nomVoie = _nomVoie
Me._voieComplement = _voieComplement
Me._codePostal = _codePostal
Me._ville = _ville
End Sub
' SECOND CONSTRUCTEUR : omet le complement de voie
Public Sub New(ByVal _nomVoie As String, _
ByVal _codePostal As String, _
ByVal _ville As String, _
ByVal _pays As String)
Me._nomVoie = _nomVoie
Me._codePostal = _codePostal
Me._ville = _ville
End Sub
(...)
End Class
Voici mes 2 petites questions :
- Au lieu de créer 2 constructeurs, est-il possible de glisser un optional dans ma classe/mon constructeur ?
- Si c'est possible, quel est la solution la plus usitée : 2 constructeurs ou une classe avec un membre optional ?
NHenry
Messages postés15112Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention13 avril 2024159 22 févr. 2008 à 16:27
Bonjour
1) c'est possible
2) cela dépend du codeur, car les autres langages que VB n'ont pas d'équivalent à Optional, donc si ta classe peut être utilisée à partir d'autre code que VB, il vaut mieux éviter et utiliser 2 constructeurs.
Personnelement, je préfère la version des 2 constructeurs.
Tu peux rappeler un constructeur de ta classe avec MyClass :
Public Sub New(byval pParam1 as String, byval pParam2 as String)
...
End sub
Public Sub New(byval pParam1 as String)
MyClass.New(pParam1,"Chaine de remplacement")
End sub
Dans Word, j'Excel. (juste pour la citation)
VB (6, .NET1&2), C++, C#.Net1
NHenry
Messages postés15112Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention13 avril 2024159 25 févr. 2008 à 11:59
Bonjour
Public Sub Demo(byval pParam1 as String, optionnal byval pParam2 as String="")
Les paramètres optionnels sont forcément à la fin, ont forcément une valeur par défaut.
Pour plus d'info, regarde dans MSDN.
Et [auteur/KRISTOFKODER/1121413.aspx Kristof_Koder] a raison, tes 2 constructeurs ont la même signature (4 String), juste pour info, changer les noms de paramètres ne change pas la signature, la signature est caractérisée par le type et le nombre de paramètres.
Si tu ne changes pas d'avis sur la question, montre nous ts consteructeurs et comment tu les appels.
Dans Word, j'Excel. (juste pour la citation)
VB (6, .NET1&2), C++, C#.Net1
NHenry
Messages postés15112Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention13 avril 2024159 25 févr. 2008 à 14:36
Bonjour
Rectification, le type de retour n'est pas une contrainte de la surcharge.
Seul éléments pris en compte :
- Nom de la fonction/sub/propriété
- Nombre de paramètres et type de ceux-ci
Sub N(String,Integer)
et
Sub N(Integer,String)
Sont bien différents, mais
function N(String,Integer) As Integer
et
function N(String,Integer) As String
Ne peuvent être différenciés (même convention d'appel)
Dans Word, j'Excel. (juste pour la citation)
VB (6, .NET1&2), C++, C#.Net1
Kristof_Koder
Messages postés918Date d'inscriptionvendredi 3 août 2007StatutMembreDernière intervention27 octobre 200810 22 févr. 2008 à 18:59
A noter que ta classe telle que tu nous la montre ne doit pas fonctionner des masses !! Tes deux constructeurs ont exactment la même signature !!
le compilo VB doit te jeter, non ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
_Fabien
Messages postés119Date d'inscriptionvendredi 17 novembre 2006StatutMembreDernière intervention28 avril 2008 25 févr. 2008 à 11:51
Kristof_Koder, si tu regardes bien, les 2 constructeurs sont différents donc ça marche. Je l'ai testé.
Si j'ai posté ce thread, c'est pour apprendre à coder proprement ou dans les normes. NHenry, merci pour ta réponse et c'est noté. Néanmoins, je souhaite savoir comment utiliser optionnal, si quelqu'un peut me montrer rapidos, je veux pas abuser.
Kristof_Koder
Messages postés918Date d'inscriptionvendredi 3 août 2007StatutMembreDernière intervention27 octobre 200810 25 févr. 2008 à 14:10
NHenry < Merci ! Je commencais à croire que je n'y voyais pas clair !
_Fabien < Tu arrives à compiler cette classe ?! Car chez moi, ca ne passe pas du tout !
L'erreur retournée est la suivante :
Erreur 1 'Public Sub New(_nomVoie As String, _voieComplement As String, _codePostal As String, _ville As String)' a plusieurs définitions comportant des signatures identiques.
Ceci correspond à ce que te précise NHenry ... seul le nom de la méthode, son éventuel type retour ainsi que le nombre et le type des arguments entrent en ligne de compte dans la signature d'une méthode ! Ici, tes deux constructeurs s'appellent 'New', ne retourne rien et exige 4 arguments de type string !
_Fabien
Messages postés119Date d'inscriptionvendredi 17 novembre 2006StatutMembreDernière intervention28 avril 2008 27 févr. 2008 à 16:26
Toutes mes excuses Kristof_Koder . En plus ma classe est "gruyère" : il manquait le pays. Voici la rectif :
Public Class Adresse
Private _nomVoie As String
Private _voieComplement As String 'Complement d'adresse : batiment, escalier, etc.
Private _codePostal As String
Private _ville As String
Private _pays As String
' PREMIER CONSTRUCTEUR COMPLET
Public Sub New(ByVal _nomVoie As String, _
ByVal _voieComplement As String, _
ByVal _codePostal As String, _
ByVal _ville As String, _
ByVal _pays As String)
Me._nomVoie = _nomVoie
Me._voieComplement = _voieComplement
Me._codePostal = _codePostal
Me._ville = _ville
Me._pays = _pays
End Sub
' SECOND CONSTRUCTEUR : omet le complement de voie
Public Sub New(ByVal _nomVoie As String, _
ByVal _codePostal As String, _
ByVal _ville As String, _
ByVal _pays As String)
Me._nomVoie = _nomVoie
Me._codePostal = _codePostal
Me._ville = _ville
Me._pays = _pays
End Sub
(...)
End Class
__________________________________________
Merci pour ces compléments d'informations NHenry. Ca me servira pour plus tard.
Quant à optional, ça marche. Je savais comment ça marchait grosso modo, mais ça plantait. En fait, c'est parce que je n'ai pas viré le 2nd conttructeur. Bon NHenry, je retiens ta soluce, à savoir utiliser 2 constructeurs plutôt que optional.
Encore Merci de votre temps consacré. A bientôt peut-être. Oui je reviendrai pour savoir quels sont les notions en objet que VB.Net accepte et celles qu'il "ignore" comme l'héritage multiple non acceptée. Avant çà, faut que je bouquinne la POO.