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 :

TObjectList<T> ne peut contenir des instances de classes dérivant de T ?


Sujet :

Langage Delphi

  1. #1
    Candidat au Club Avatar de emltri
    Homme Profil pro
    Développeur Delphi
    Inscrit en
    Novembre 2005
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur Delphi

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3
    Points : 4
    Points
    4
    Par défaut TObjectList<T> ne peut contenir des instances de classes dérivant de T ?
    Hello,

    J'ai voulu utiliser TObjectList<T> pour stocker des instances de colonnes dans une liste.

    Le problème est que Delphi ne me laisse ajouter que des instances de T dans cette liste, et râle quand je veux ajouter des instances de classes dérivées de T !

    C'est dommage car c'est classique d'avoir une classe de base et des classes dérivées spécialisées.

    Confirmez vous cette limitation ?

    Emmanuel

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 091
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 091
    Points : 41 069
    Points
    41 069
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    Il faut remplacer le T par le type d'objet. Je peux stocker des formes dans un TObjectList de la manière suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ListedeFormes : TObjectList<TForm>;
    et accéder à tout objet de cette forme, pourvu de bien transtyper
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TForm(ListedeFormes[i]).Caption:='toto'
    Confirmez-vous cette limitation ?
    Non ou alors, pour moi, vous expliquez mal votre problème, ce qu'un bout de code aurait montré
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  3. #3
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 448
    Points
    28 448
    Par défaut
    ce n'est pas le cas, peut-on voir ton code ?

    démonstration
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    uses
      System.Generics.Collections;
     
    procedure TForm1.FormCreate(Sender: TObject);
    var
      L: TObjectList<TComponent>;
    begin
      L := TObjectList<TComponent>.Create(False);
      L.Add(Self);
      L.Free;
    end;
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  4. #4
    Candidat au Club Avatar de emltri
    Homme Profil pro
    Développeur Delphi
    Inscrit en
    Novembre 2005
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur Delphi

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    Je sais qu'il faut remplacer T par le type d'objet.

    Ma question portait sur l'ajout dans la liste, d'instances de classes dérivées de T.

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    type
      TExemple = class
      end;
     
      TExemple1 = class(TExemple)
      end;
     
      TExemple2 = class(TExemple)
      end;
    Pour répondre à ma question, oui c'est bien possible. Il n'y a pas de limitation. J'avais fait une erreur dans le type d'une variable locale.

    Ceci passe bien à la compilation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    var
      Exemples: TObjectList<TExemple>;
    begin
      Exemples := TObjectList<TExemple>.Create(True);
      Exemples.Add(TExemple1.Create);
      Exemples.Add(TExemple2.Create);

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

Discussions similaires

  1. GtkWidget qui peut contenir des widgets crées et des formes
    Par hajer23 dans le forum GTK+ avec C & C++
    Réponses: 6
    Dernier message: 23/04/2010, 23h20
  2. Créer des instances de classes EMF dans Eclipse avec une jolie IHM
    Par obernard dans le forum Eclipse Platform
    Réponses: 3
    Dernier message: 24/02/2009, 19h21
  3. Envoyer des instances de classes via TCP
    Par ZouBi dans le forum C++
    Réponses: 8
    Dernier message: 02/08/2008, 17h07
  4. Réponses: 6
    Dernier message: 23/02/2006, 20h23
  5. Conditions de destruction des instances de classes
    Par elvivo dans le forum Général Python
    Réponses: 4
    Dernier message: 29/12/2004, 17h16

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