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 :

Types génériques et propriétés


Sujet :

Langage Delphi

  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2002
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 22
    Points : 12
    Points
    12
    Par défaut Types génériques et propriétés
    Bonjours à tous,

    Avis aux spécialistes des types génériques, pour Delphi 2009 Win32

    Plusieurs questions sur lesquelles j'ai passé quelques heures sans trouver de solution (types génériques: nouveau pour moi...)

    1) Peut on créer une classe de base dérivée d'une classe générique fermée (comme ci dessous)
    Ca semble possible en Delphi .NET (d'aprés tuto sur le site), mais erreur en Win32?
    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    TVehicule<T> = class(TPersistent)
    TCamion = class(TVehicule<TCamion>)
    2) Comment utiliser des méthodes génériques en temps d'accesseur de propriété?
    Exemple (qui ne fonctionne pas: identificateur GetData non déclaré...)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    TCamion = class (TObject)
    protected
       function GetData<T>: T;
    published
       property Conducteur: TConducteur read GetData;
      // avec GetData<TConducteur> : GetData`1 n'est pas un champ ou un identificateur de méthode reconnu
    (edit) Je me permet d'en rajouter une troisième...

    3) Peut on transtyper en utilisant le type générique?
    Exemple (retourne une erreur sur as... : opérateur non applicable à ce type d'opérande)
    function TDSWrapper<T>.WrapGetItem(Index: integer): T;
    begin
    Result := (Self.GetItem(Index) as T);
    end;
    Si je 'force' le casting ( T(self.Getitem...) ) l'erreur devient: Transtypage incorrect.

    Merci!
    g

  2. #2
    Membre éclairé Avatar de Kaféine
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 569
    Points : 736
    Points
    736
    Par défaut
    Salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
      TVehicule = class
      end;
     
      TCamion = class(TVehicule)
      end;
     
      TVoiture = class(TVehicule)
      end;
     
      TConvoit = class(TObjectList<TVehicule>)
      end;
    tour de france:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    var
      CaravaneTourFrance: TConvoit;
    begin
      CaravaneTourFrance := TConvoit.Create;
      CaravaneTourFrance.Add(TCamion.Create);
      CaravaneTourFrance.Add(TVoiture.Create);
      CaravaneTourFrance.Free;
    ex propriété generique:

    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
     
      THomme = class
      end;
     
      TFemme = class
      end;
     
      TGroup<T: class> = class(TObjectList<T>)
      private
        function GetIndividu(Index: Integer): T;
      public
        property Individu[Index: Integer]: T read GetIndividu;
      end;
     
    implementation
     
    { TGroup<T> }
     
    function TGroup<T>.GetIndividu(Index: Integer): T;
    begin
      Result := inherited Items[Index];
    end;
    en espérant t'avoir donné quelques pistes...

  3. #3
    Membre à l'essai
    Inscrit en
    Mai 2002
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 22
    Points : 12
    Points
    12
    Par défaut
    Merci Kaféine,
    en effet ca clarifie pas mal de choses, en particulier sur les propriétés génériques: plus simple à utiliser que ma méthode initiale
    Je pense pouvoir trouver un équivalent au passage de type générique en paramètre d'une méthode de propriété, avec cette approche
    g.

Discussions similaires

  1. [2.0] polymorphisme avec des types générique
    Par mister3957 dans le forum Général Dotnet
    Réponses: 3
    Dernier message: 31/05/2007, 08h11
  2. Type générique paramétré ?
    Par Lebbihi dans le forum Langage
    Réponses: 2
    Dernier message: 15/03/2007, 09h58
  3. [Framework] IOC - Type générique
    Par seawolfm dans le forum Spring
    Réponses: 1
    Dernier message: 06/02/2007, 18h17
  4. Réponses: 12
    Dernier message: 23/09/2006, 12h12
  5. y a-t-il un support de types génériques pour python ?
    Par silverhawk.os dans le forum Général Python
    Réponses: 15
    Dernier message: 24/03/2006, 18h23

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