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

Free Pascal Discussion :

Création dynamique d'une classe [Free Pascal]


Sujet :

Free Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de TheFreeBerga
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    63
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 63
    Par défaut Création dynamique d'une classe
    Bonjour à toutes & à tous,

    Je cherche à réaliser quelque chose qui existe mais je ne me souviens plus comment le faire et mes recherches sont restées infructueuses...

    Contexte:

    Une classe A qui contient un champ de type classe V.
    Le but étant de dériver la classe V, la passer en paramètre à l'objet de classe A qui va créer une instance de celle-ci.

    Exemple:

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    TClasseAderiver = class
      PUBLIC
        function WriteToStream( const pStream: TStream ): Boolean; virtual; abstract;
        function LoadFromStream( const pStream: TStream ): Boolean; virtual; abstract;
    end;
     
    TClassContainer = class
      PRIVATE
        TheClass: TClasseAderiver;
      PUBLIC
        constructor Create( pSourceClass: TClasseAderiver );
        procedure Save( const pStream: TStream );
        procedure Load( const pStream: TStream );
    end;
     
    constructor TClassContainer.Create( pSourceClass: TClasseAderiver )
    begin
      TheClass := pSourceClass.Create;
    end;
     
    procedure TClassContainer.Save( const pStream: TStream );
    begin
      TheClass.SaveToStream( pStream );
    end;
     
    procedure TClassContainer.Load( const pStream: TStream );
    begin
      TheClass.LoadFromStream( pStream );
    end;
    Bien entendu, ce code reflète ce que je désire obtenir mais ne fonctionne pas à la compilation...

    Merci d'avance pour votre aide !

  2. #2
    Membre Expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 568
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 568
    Par défaut
    Il faut utiliser les métaclasses (approfondis avec la doc)

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    TClasseAderiver = class
      PUBLIC
        function WriteToStream( const pStream: TStream ): Boolean; virtual; abstract;
        function LoadFromStream( const pStream: TStream ): Boolean; virtual; abstract;
    end;
     
    TClasseAderiverClass = class of TClasseAderiver;
     
    TClassContainer = class
      PRIVATE
        TheClass: TClasseAderiver;
      PUBLIC
        constructor Create( pSourceClass: TClasseAderiverClass);
        procedure Save( const pStream: TStream );
        procedure Load( const pStream: TStream );
    end;
     
    constructor TClassContainer.Create( pSourceClass: TClasseAderiverClass);
    begin
      TheClass := pSourceClass.Create;
    end;
     
    procedure TClassContainer.Save( const pStream: TStream );
    begin
      TheClass.SaveToStream( pStream );
    end;
     
    procedure TClassContainer.Load( const pStream: TStream );
    begin
      TheClass.LoadFromStream( pStream );
    end;
    Dans la méthode Create tu passes la classe (pas une instance) voulue.

    Ca devrait passer...

    M E N S . A G I T A T . M O L E M
    Debian 64bit, Lazarus + FPC -> n'oubliez pas de consulter les FAQ Delphi et Pascal ainsi que les cours et tutoriels Delphi et Pascal

    "La théorie, c'est quand on sait tout, mais que rien ne marche. La pratique, c'est quand tout marche, mais qu'on ne sait pas pourquoi. En informatique, la théorie et la pratique sont réunies: rien ne marche et on ne sait pas pourquoi!".
    Mais Emmanuel Kant disait aussi : "La théorie sans la pratique est inutile, la pratique sans la théorie est aveugle."

  3. #3
    Membre confirmé Avatar de TheFreeBerga
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    63
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 63
    Par défaut
    Super !
    C'est exactement ça !!!

    Merci beaucoup et Bon réveillon !

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

Discussions similaires

  1. D7/création dynamique d'une Form
    Par jer64 dans le forum Delphi
    Réponses: 4
    Dernier message: 05/09/2006, 21h36
  2. [ClassLoader] Chargement dynamique d'une classe -> problème avec packages !
    Par ymerej dans le forum API standards et tierces
    Réponses: 9
    Dernier message: 31/05/2006, 21h37
  3. [RegEx] Trouver les appels statique et dynamique d'une class
    Par jeff_! dans le forum Langage
    Réponses: 8
    Dernier message: 07/04/2006, 16h31
  4. [Firebird - D7] Erreur - Création dynamique d'une base
    Par EGI dans le forum Bases de données
    Réponses: 5
    Dernier message: 29/03/2005, 14h26
  5. [FB1.5]Création dynamique d'une procédure stockée ?
    Par Sitting Bull dans le forum SQL
    Réponses: 3
    Dernier message: 10/12/2004, 14h44

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