IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

[VB.NET] Comment forcer une surcharge de constructeur ?


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 6
    Par défaut [VB.NET] Comment forcer une surcharge de constructeur ?
    Bonjour.

    Je travaille sous VS 2005 fr.
    Je cherche à forcer les constructeurs d'une classe pour qu'il aient une signature particulière, connue d'une autre classe qui les instancie.
    Mes classes B,C et D héritent de la classe A.
    La classe A implémente une interface I.

    La classe Z instancie des objets dont le type est la classe B, C, ou D.

    Comment faire pour que un des constructeurs de B, C et D prennent forcément un paramètre de type string (à part dire au programmeur qu'il faut le faire sinon çà marche pas..) ?

    J'ai essayé le override dans A ou la définition dans I, mais VS me dit que c'est interdit de mettre un New en mustoverride ou un new dans l'interface.


    Merci.
    JuRu

  2. #2
    Rédacteur
    Avatar de abelman
    Inscrit en
    Février 2003
    Messages
    1 106
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 1 106
    Par défaut
    Dans la classe A, fais un seul constructeur (protected ou public) qui prend un paramètre String

    Cache le constructeur par défaut aux autres classes (classes enfants comprises) en le déclarant privé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    private Sub New()
    End Sub

  3. #3
    Membre expérimenté
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Par défaut
    Citation Envoyé par abelman
    Cache le constructeur par défaut aux autres classes (classes enfants comprises) en le déclarant privé
    A partir du moment où l'on défini un constructeur autre que celui par défaut, le constructeur par défaut n'est plus généré automatiquement. A moins que le constructeur par défaut ne soit utile en interne (appelé par un autre constructeur pour des initialisations par exemple) ce n'est donc pas nécessaire de le déclarer tout court

  4. #4
    Rédacteur
    Avatar de abelman
    Inscrit en
    Février 2003
    Messages
    1 106
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 1 106
    Par défaut
    Citation Envoyé par StormimOn
    A partir du moment où l'on défini un constructeur autre que celui par défaut, le constructeur par défaut n'est plus généré automatiquement. A moins que le constructeur par défaut ne soit utile en interne (appelé par un autre constructeur pour des initialisations par exemple) ce n'est donc pas nécessaire
    Exact.

    Pour etre complet, je dirai que avec ma proposition, rien n'empêche à la classe B d'avoir un constructeur n'ayant pas la même signature (un string en paramètre). Donc cela ne répond pas à ta question.

    Je ne pense pas qu'on puisse le faire autrement qu'en demandant au développeur de ne faire qu'un constructeur avec un string

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    487
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 487
    Par défaut
    Il me semble qu'a partir du moment ou on dérive une classe, on doit conserver les constructeurs de la classe de base.
    Donc pas de problème, non?

  6. #6
    Rédacteur
    Avatar de abelman
    Inscrit en
    Février 2003
    Messages
    1 106
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 1 106
    Par défaut
    Citation Envoyé par NicolasG
    Il me semble qu'a partir du moment ou on dérive une classe, on doit conserver les constructeurs de la classe de base.
    Donc pas de problème, non?
    Non pas forcement,

    Lorsqu'on instancie la classe enfant, on doit créer aussi un objet de la classe parent certes. Mais on est pas obligé d'avoir les même constructeur.

    Exple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    Public Class Parent
        Public Sub New(chaine as String)
        End Sub
    End Class
     
    Public Class enfant
         Inherits Parent
     
        Public Sub New(chaine as string, i as Integer)
            MyBase.New(chaine)
        End Sub
     
        Public Sub New(uneVar as UnType)
            MyBase.New(UneVar.ToString())
        End Sub
    End Class
    Il suffit juste dans chaque constructeur de la classe enfant d'appeller un constructeur existant du parent

  7. #7
    Expert confirmé
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 65
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Par défaut
    Citation Envoyé par JuRu
    ...Je cherche à forcer les constructeurs d'une classe pour qu'il aient une signature particulière, connue d'une autre classe qui les instancie.
    Mes classes B,C et D héritent de la classe A.
    La classe A implémente une interface I.

    La classe Z instancie des objets dont le type est la classe B, C, ou D.

    Comment faire pour que un des constructeurs de B, C et D prennent forcément un paramètre de type string
    ...
    Excusez-moi j'ai dû louper un truc, puisque si tous les dérivés d'une classe abstraite doivent avoir ce construct eur specifique alors pourquoi ne pas le mettre dans la classe mère tout simplement comme constructeur par défaut

  8. #8
    Rédacteur
    Avatar de abelman
    Inscrit en
    Février 2003
    Messages
    1 106
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 1 106
    Par défaut
    Citation Envoyé par neguib
    Excusez-moi j'ai dû louper un truc, puisque si tous les dérivés d'une classe abstraite doivent avoir ce construct eur specifique alors pourquoi ne pas le mettre dans la classe mère tout simplement comme constructeur par défaut
    Cela n'empêche pas les developpeurs des classes dérivées à creer des constructeurs differents

  9. #9
    Expert confirmé
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 65
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Par défaut
    Citation Envoyé par abelman
    Cela n'empêche pas les developpeurs des classes dérivées à creer des constructeurs differents
    Certes mais ce n'était pas la question. Pour moi le constructeur par défaut peut très bien initialiser un string par défaut (quoique j'aurais préféré une constante d'énumération)

  10. #10
    Rédacteur
    Avatar de abelman
    Inscrit en
    Février 2003
    Messages
    1 106
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 1 106
    Par défaut
    Citation Envoyé par neguib
    Certes mais ce n'était pas la question.
    Si justement c'est ça la question d'après ce que j'ai compris

  11. #11
    Expert confirmé
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 65
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Par défaut
    Citation Envoyé par abelman
    Si justement c'est ça la question d'après ce que j'ai compris
    ben je dois être bouché à l'émeri aujourd'hui car
    Comment faire pour que un des constructeurs de B, C et D prennent forcément un paramètre de type string (à part dire au programmeur qu'il faut le faire sinon çà marche pas..) ?
    ne veut pas dire d'empêcher l'implémentation d'autres constructeurs

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [VB.NET]Comment Imprimer une form
    Par bernard06 dans le forum Windows Forms
    Réponses: 4
    Dernier message: 19/10/2011, 17h43
  2. [ADO.NET] Comment rendre une certaine colonne "AutoIncrement" ?
    Par maitrebn dans le forum Accès aux données
    Réponses: 3
    Dernier message: 23/03/2005, 22h12
  3. [VB.NET] Comment vider une DropDownList
    Par Dnx dans le forum ASP.NET
    Réponses: 6
    Dernier message: 04/03/2005, 10h13
  4. [VB.Net] Comment generer une page html dynamiquement ?
    Par Anonymous dans le forum ASP.NET
    Réponses: 3
    Dernier message: 13/03/2003, 10h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo