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

Langage Delphi Discussion :

Mettre une property en virtual


Sujet :

Langage Delphi

  1. #1
    Membre confirmé Avatar de WebPac
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 947
    Points : 512
    Points
    512
    Par défaut Mettre une property en virtual
    Bonjour, j'ai fait une
    property Nom: string read GetNom;
    dans ma classe mère.
    Je souhaiterais la surcharger dans la classe fille.
    Mais je n'y arrive pas.
    J'ai essayer de mettre virtual; après property, il bugue, après le GetNom de la mère, il ne rentre pas dans le GetNom de la fille.

    Je suis perdu la.

  2. #2
    Membre habitué

    Profil pro
    Inscrit en
    Avril 2002
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 99
    Points : 126
    Points
    126
    Par défaut
    dans ce cas pourquoi ne pas redéclarer la propriété directement dans la classe fille? (a moins que tu ai besoin de passer dans le GetNom de la classe mère mais ça m'étonnerais)
    A+---------------> Nat <-------------------

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 298
    Points : 318
    Points
    318
    Par défaut
    A priori, c'est la procedure GetNom qui faut mettre en virtual.

  4. #4
    Membre expert

    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Janvier 2004
    Messages
    2 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 123
    Points : 3 256
    Points
    3 256
    Par défaut
    Pourquoi ne pas surcharger plutot le GetNom ?

    Classe mère
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    function GetNom : string;virtual;
    property Nom: string read GetNom;
    Classe fille
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    function GetNom : string;override;
    property Nom; 
     
    .....
     
    function GetNom : string;
    begin
    inherited;
    // puis traitement
    end;
    CV :
    - LinkedIn
    - Viadeo

  5. #5
    Membre confirmé Avatar de WebPac
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 947
    Points : 512
    Points
    512
    Par défaut
    OK, parfait, j'ai trouvé, en fait, j'avais oublié de mettre override pour la procédure GetNom de la fille.

    J'ai toujours des problèmes avec les override encore en fait.

  6. #6
    Membre confirmé Avatar de WebPac
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 947
    Points : 512
    Points
    512
    Par défaut
    yobenzen, pourquoi tu mets property Nom; sans read dans la classe fille ?
    Est-ce pour faire un code propre ou cela a-t-il une véritable utilité ?

    PS : Merci pour votre aide.

  7. #7
    Membre expert

    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Janvier 2004
    Messages
    2 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 123
    Points : 3 256
    Points
    3 256
    Par défaut
    override -> pour surchargé méthode déclaré dynamic ou virtual

    reintroduce -> pour surchargé méthode n'étant pas dynamic ni virtual (ne pas oublier le inherited)

    overload -> pour redéclarer une méthode de même nom mais avec paramètres différents

    Voila, en espérant que cela pourra t'aider.

    A+
    CV :
    - LinkedIn
    - Viadeo

  8. #8
    Membre expert

    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Janvier 2004
    Messages
    2 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 123
    Points : 3 256
    Points
    3 256
    Par défaut
    Pour continuer à utiliser la propriété dans un composant dérivé, tu dois la redéclarer.
    Mais comme elle est déjà présente dans l'ancêtre, il n'est pas nécessaire de la redéclarer entièrement.

    Est-ce pour faire un code propre ou cela a-t-il une véritable utilité ?
    Bonne question...
    Je pense en fait que cela ne change pas grand chose... (j'ai tiré cela des sources de la VCL et la dedans ca ne marche quasiment que comme cela)

    A+
    CV :
    - LinkedIn
    - Viadeo

  9. #9
    Membre chevronné
    Avatar de Pierre Castelain
    Inscrit en
    Avril 2002
    Messages
    523
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 523
    Points : 1 943
    Points
    1 943
    Par défaut
    Citation Envoyé par yobenzen
    Pour continuer à utiliser la propriété dans un composant dérivé, tu dois la redéclarer.
    Mais comme elle est déjà présente dans l'ancêtre, il n'est pas nécessaire de la redéclarer entièrement.

    Est-ce pour faire un code propre ou cela a-t-il une véritable utilité ?
    Bonne question...
    Je pense en fait que cela ne change pas grand chose... (j'ai tiré cela des sources de la VCL et la dedans ca ne marche quasiment que comme cela)

    A+
    Petite précision, il ne sert à rien de redéclarer une propriété héritée si celle-ci est "visible", c'est à dire si la déclaration dans la classe mère est faite dans la partie public ou published.
    Le cas classique dans la VCL est que les propriétés sont déclarées dans la partie protected des classes TCustomxxx, elles doivent donc être redéclarées dans la partie public ou published pour pouvoir être utilisées de l'extérieur. Cet artifice permet juste de changer la visibilité d'une propriété existante.

  10. #10
    Membre expert

    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Janvier 2004
    Messages
    2 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 123
    Points : 3 256
    Points
    3 256
    Par défaut
    Oups
    (A force de dériver j'en pers mon delphi moi désolé pour mon erreur)
    CV :
    - LinkedIn
    - Viadeo

  11. #11
    Membre chevronné
    Avatar de Pierre Castelain
    Inscrit en
    Avril 2002
    Messages
    523
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 523
    Points : 1 943
    Points
    1 943
    Par défaut
    On ne peut pas dire qu'il s'agisse d'une erreur, dans ce cas précis c'est inutile, tout simplement.

  12. #12
    Membre confirmé Avatar de WebPac
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 947
    Points : 512
    Points
    512
    Par défaut
    Merci beaucoup pour toutes ces precisions, elles m'aideront beaucoup.

    J'ai une question sur l'overload encore mais je vais ouvrir un nouveau sujet pour ne pas mélanger les sujets.

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

Discussions similaires

  1. [API Windows] Mettre une fenêtre à jour
    Par Zazeglu dans le forum Autres éditeurs
    Réponses: 7
    Dernier message: 22/01/2004, 15h48
  2. Comment mettre une image en fond de JFrame
    Par marc26 dans le forum Débuter
    Réponses: 3
    Dernier message: 19/01/2004, 17h57
  3. [Drag & Drop] Mettre une fiche dans un panel
    Par corwin_d_ambre dans le forum Composants VCL
    Réponses: 5
    Dernier message: 12/01/2004, 10h46
  4. Réponses: 2
    Dernier message: 08/08/2003, 17h30
  5. Peut on mettre une image dans une BD MySQL ?
    Par maddog2032 dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 25/07/2003, 16h18

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