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

  1. #1
    Membre averti
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    janvier 2007
    Messages
    1 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : janvier 2007
    Messages : 1 142
    Points : 332
    Points
    332

    Par défaut À quoi sert Inherited dans les Create et Destroy ?

    Bonjour,

    J'ai créé des classes personnalisées. Mais j'ai pas clairement compris le coup du Inherited...

    Pouvez-vous m'expliquer clairement à quoi sert Inherited dans les create et Destroy ? Car j'ai compris que ça hérite... Mais ça hérite de quoi, comment, quel effet ?

    J'ai lu des sujets dans la faq, mais ça ne m'a pas aidé.

    Merci de votre aide,

  2. #2
    Rédacteur/Modérateur
    Avatar de Andnotor
    Profil pro
    Inscrit en
    septembre 2008
    Messages
    4 785
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : septembre 2008
    Messages : 4 785
    Points : 10 224
    Points
    10 224

    Par défaut

    inherited appelle une méthode de la classe ancêtre. Sans autre spécification (le mot inherited seul), c'est la méthode de même nom avec les mêmes arguments.

    Constructeur/destructeur :
    Lorsqu'il y a une hiérarchie de classes, chacune peut allouer de nouveaux champs et chacune ne va s'occuper que de ce qu'elle déclare. C'est l'un des principes fondamentaux de la POO : l'héritage.
    Mais même si la hiérarchie de classes est connue, l'appel du constructeur ancêtre n'est pas implicite. C'est là qu'entre en scène inherited, c'est lui qui permet de chaîner les différentes classes.

    Le même principe s'applique dans le destructeur pour la libération des ressources.

    Il est conseillé de toujours appeler inherited dans le constructeur et le destructeur même si ça ne semble pas forcément nécessaire (exemple, TObject ne procède à aucune allocation... pour le moment ; mais dans le futur qui sait !).

  3. #3
    Membre éclairé
    Avatar de pprem
    Homme Profil pro
    MVP Embarcadero - développeur Delphi, PHP et JS
    Inscrit en
    juin 2013
    Messages
    345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : MVP Embarcadero - développeur Delphi, PHP et JS
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : juin 2013
    Messages : 345
    Points : 825
    Points
    825
    Billets dans le blog
    1

    Par défaut

    Petit complément : le inherited du constructeur doit être appelé en premier et c'est l'inverse au niveau du destructeur où il doit être appelé en dernier.

    Ce n'est pas une contrainte du langage, c'est plutôt une habitude / bonne pratique à prendre, surtout lorsqu'on utilise des éléments de l'ancêtre dans le constructeur/destructeur.

    Dans le cas des composants attachés à une fiche depuis le concepteur, le chargement des propriétés à partir du DFM/FMX est fait dans l'ancêtre, il est donc impératif de commencer par inherited et d'en avoir un dans le constructeur et le destructeur (lorsqu'on surcharge le destroy).
    Patrick P.
    Mon blog sur Delphi - Formations Delphi en entreprise

    Webinaires à venir : reprise en septembre mais sessions spéciales sur juillet/août

    Je ferais bien du teasing sur un gros truc mais je vais m'abstenir même si le clavier me démange... et ce n'était pas l'arrivée de FMX Linux sur GetIt, quoique ça aurait pu, mais non.

  4. #4
    Rédacteur/Modérateur
    Avatar de Andnotor
    Profil pro
    Inscrit en
    septembre 2008
    Messages
    4 785
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : septembre 2008
    Messages : 4 785
    Points : 10 224
    Points
    10 224

    Par défaut

    C'est sûr qu'on ne peut pas accéder à quelque chose qui n'est pas encore alloué comme on ne peux plus sur quelque chose déjà libéré.
    Mais lorsqu'on se limite à la classe courante il n'y a aucune contrainte, voire même une obligation d'inverser la logique.

Discussions similaires

  1. [Delphi 2009] inherited dans les exemples
    Par Just-Soft dans le forum Langage
    Réponses: 9
    Dernier message: 21/02/2014, 12h46
  2. Debutant: à quoi sert * { blabla; } dans css
    Par mouhssine84 dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 30/04/2010, 13h38
  3. [1.x] A quoi sert phing dans symfony
    Par cornnery dans le forum Symfony
    Réponses: 1
    Dernier message: 10/03/2008, 16h56
  4. A quoi sert le ~ dans latex
    Par Fox213 dans le forum Mise en forme
    Réponses: 2
    Dernier message: 13/12/2007, 18h10
  5. A quoi sert "AuthGroupFile" dans .htaccess ?
    Par Christophe Charron dans le forum Apache
    Réponses: 4
    Dernier message: 14/09/2006, 15h59

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