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

Delphi Discussion :

Dériver de TThread et d'une interface


Sujet :

Delphi

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 10
    Points : 9
    Points
    9
    Par défaut Dériver de TThread et d'une interface
    Bonjour à tous,

    je viens du C++ (depuis 1999!) et je commence à développer en Delphi depuis... 1 mois. Je bloque sur un problème conceptuel qui, je suis sûr, est un problème de débutant et une peccadille pour les développeurs ici présents. Voici :

    - J'ai une classe A qui dérive d'une interface IObservable que j'ai déclaré comme suit : A= class(TInterfacedObject, IObservable) (implémentation du design pattern Observateur)

    - Par ailleurs, je veux que cette classe dérive aussi à présent de la classe abstraite TThread.

    Et là je rencontre un problème car je ne peux évidemment pas écrire : A = class(TInterfacedObject, IObservable, TThread) car il n'y a pas d'héritage multiple en Delphi.

    Mais je ne peux pas non plus remplacer TThread par une IThread puisque TThread ne dérive pas d'une interface.

    Comment faire ?

    Merci par avance pour vos suggestions avisées.

  2. #2
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 784
    Points : 5 915
    Points
    5 915
    Par défaut
    Bonjour,
    Citation Envoyé par JimKirk Voir le message
    - J'ai une classe A qui dérive d'une interface IObservable que j'ai déclaré comme suit : A= class(TInterfacedObject, IObservable) (implémentation du design pattern Observateur)

    - Par ailleurs, je veux que cette classe dérive aussi à présent de la classe abstraite TThread.

    Et là je rencontre un problème car je ne peux évidemment pas écrire : A = class(TInterfacedObject, IObservable, TThread) car il n'y a pas d'héritage multiple en Delphi.

    Mais je ne peux pas non plus remplacer TThread par une IThread puisque TThread ne dérive pas d'une interface.

    Comment faire ?
    Je ferais comme ceci :
    Dériver TInterfacedObject en y incorporant un TThread (classe composée) : TThreadTInterfacedObject et cette dernière associée à l'interface.
    On aurait A:= class(TThreadTInterfacedObject, IObservable)
    Philippe.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 10
    Points : 9
    Points
    9
    Par défaut
    Je vois. Merci beaucoup !

  4. #4
    Membre expérimenté Avatar de guillemouze
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    876
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 876
    Points : 1 448
    Points
    1 448
    Par défaut
    Ou tu peux aussi faire le contraire, hériter de TThread et implémenter les quelques fonctions de IInterface (QueryInterface, AddRef, Release), dont tu trouvera le code dans TInterfacedObject.
    Attention, tu as 2 comportements qui peuvent te rendre dans un état incohérent : le TThread.FreeOnTerminate, et la destruction automatique des interfaces.

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 10
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par guillemouze Voir le message
    Ou tu peux aussi faire le contraire, hériter de TThread et implémenter les quelques fonctions de IInterface (QueryInterface, AddRef, Release), dont tu trouvera le code dans TInterfacedObject.
    Attention, tu as 2 comportements qui peuvent te rendre dans un état incohérent : le TThread.FreeOnTerminate, et la destruction automatique des interfaces.
    OK, merci également pour cette seconde option !

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

Discussions similaires

  1. Comment faire une interface de ce type....
    Par SpiderAlpha dans le forum C++Builder
    Réponses: 6
    Dernier message: 30/04/2007, 13h50
  2. Appeler un driver USB via une interface.
    Par HR100 dans le forum Langage
    Réponses: 1
    Dernier message: 19/12/2005, 22h38
  3. Comment créé une "interface" pour mes programmes??
    Par alcazar dans le forum Autres éditeurs
    Réponses: 5
    Dernier message: 09/02/2004, 13h02
  4. portabilité d'une interface
    Par marou dans le forum JBuilder
    Réponses: 4
    Dernier message: 21/03/2003, 08h53

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