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 :

instanciation unique d'un champs dans une classe


Sujet :

Delphi

  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2006
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 21
    Points : 19
    Points
    19
    Par défaut instanciation unique d'un champs dans une classe
    Salut!

    Est-ce que quelqu'un sait comment faire pour instancier une seule fois un champs dans une classe qui elle est instanciée plusieurs fois (le champs est partagé entre tous les objets de cette classe) ? Comme cela se fait en Java avec le mot clé Static.

    Merci pour votre aide.

    Fabrice.

  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 561
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

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

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 561
    Points : 3 955
    Points
    3 955
    Par défaut
    Salut

    Tu peux habiller une propriété avec des méthodes de classe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    TMaClasse = class
    private
      class function GetMaProp: TLeType;
    public 
      property MaProp: TLeType read GetMaProp;
    end;
     
    class function TMaClasse.GetMaProp: TLeType;
    begin
    // Code d'accès à l'objet
    End;
    Attention : Cette solution ne garantit pas l'unicité de l'objet accédé par MaProp mais il est indépendant d'une instance de TMaClasse en particulier.

    cdlt

    e-ric

  3. #3
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 897
    Points : 1 561
    Points
    1 561
    Par défaut
    En complément, tu peux également consulter ce sujet récent.

  4. #4
    Membre à l'essai
    Inscrit en
    Mai 2006
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 21
    Points : 19
    Points
    19
    Par défaut
    Citation Envoyé par e-ric
    Salut

    Tu peux habiller une propriété avec des méthodes de classe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    TMaClasse = class
    private
      class function GetMaProp: TLeType;
    public 
      property MaProp: TLeType read GetMaProp;
    end;
     
    class function TMaClasse.GetMaProp: TLeType;
    begin
    // Code d'accès à l'objet
    End;
    Attention : Cette solution ne garantit pas l'unicité de l'objet accédé par MaProp mais il est indépendant d'une instance de TMaClasse en particulier.

    cdlt

    e-ric
    J'ai essayé cette façon de faire.
    Mais si j'écris dans mon code TMaClasse.MaProp, cela plante à la compilation avec l'erreur 'Method identifier expected'.
    Les propriétés ne peuvent pas donc être accéder de cette manière.
    Si je créé une méthode de classe pour accéder à cette propriété, cela non plus n'est pas possible.

    Quelqu'un aurait-il une idée ?

  5. #5
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 897
    Points : 1 561
    Points
    1 561
    Par défaut
    Cela ne peut pas être associé à une propriété. Par contre comme le code l'exemple ci-dessous convient parfaitement.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    tmyclass=class
      private
      public
        class function GetMaProp: string;
      end;
    implémentation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    class function tmyclass.GetMaProp: string;
    begin
      Result := 'test';
    end;
    A l'exécution
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      edit1.Text := tmyClass.GetMaProp;
    end;
    Me renvoit bien le mot 'Test' dans mon composant edit1.

    Et si j'instancie ma classe, et fait appel à la méthode de classe je récupère encore la valeur 'Test'.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    var myClasse: tmyclass;
    ...
     
      myClasse := tmyclass.Create;
      edit2.Text := myClasse.GetMaProp;

    Cordialement

Discussions similaires

  1. combien de champs dans une classe ?
    Par champomy62 dans le forum Général Dotnet
    Réponses: 17
    Dernier message: 25/04/2012, 18h49
  2. [PEAR][HTML_QuickForm] Instanciation dans une classe
    Par Bownobo dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 23/09/2008, 16h38
  3. Réponses: 2
    Dernier message: 30/11/2007, 17h54
  4. Réponses: 23
    Dernier message: 11/11/2007, 20h01

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