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 :

variable avec portée sur fiche


Sujet :

Langage Delphi

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    831
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 831
    Points : 261
    Points
    261
    Par défaut variable avec portée sur fiche
    bonjour,

    j'ai un doute concernant la position pour déclarer une variable qui ait une portée pour l'unité en cours seulement.
    je veux que la variable soit accessible par toute le méthodes de l'unité en cours.

    Est ce que les 2 codes suivants sont équivalents ou quel est le meilleur?

    dans la partie private de l'interface:
    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
    unit Unit1;
    
    interface
    
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs;
    
    type
      TForm1 = class(TForm)
      private
      mavariable:integer;    { Déclarations privées }
      public
        { Déclarations publiques }
      end;
    
    var
      Form1: TForm1;
    
    implementation
    
    {$R *.dfm}
    
    end.
    ou bien dans l'implémentation:

    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
     unit Unit1;
    
    interface
    
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs;
    
    type
      TForm1 = class(TForm)
      private
         { Déclarations privées }
      public
        { Déclarations publiques }
      end;
    
    var
      Form1: TForm1;
    
    implementation
    
    {$R *.dfm}
    
     mavariable:integer;
    
    end.

    merci

  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 looping Voir le message
    j'ai un doute concernant la position pour déclarer une variable qui ait une portée pour l'unité en cours seulement.
    je veux que la variable soit accessible par toute le méthodes de l'unité en cours.
    Si cette variable doit être commune à tous les objets instanciés de la classe TForm1, alors elle doit être placée dans la partie implementation de votre unité.
    Si vous utilisez Delphi 2006 et suivant, elle peut-être aussi déclarée comme variable de classe et est alors définie dans la classe. A préférer à une variable globale dans la partie implementation.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    type
      TForm1 = class(TForm)
      private
        { Déclarations privées }
        class var MaVariable: Integer;
      public
        { Déclarations publiques }
      end;
    Si cette variable doit être spécifique à chaque objet instancié de la classe TForm1, alors elle doit être placée dans la partie private de la classe.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    type
      TForm1 = class(TForm)
      private
        { Déclarations privées }
        MaVariable: Integer;
      public
        { Déclarations publiques }
      end;
    Philippe.

  3. #3
    Membre éclairé Avatar de peter27x
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 029
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 029
    Points : 757
    Points
    757
    Par défaut
    Je suis dubitatif devant la réponse de PH.B, normalement, tout objet d'une classe a accès a ses membres privés, sinon à quoi servent ils ?

  4. #4
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 844
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 844
    Points : 11 274
    Points
    11 274
    Billets dans le blog
    6
    Par défaut
    Ph. B. n'a pas dit le contraire (toute instance de TMyObject a bien accès à ses propres champs privés) et bien précisé les différences entre les 2 codes exposés pour appuyer sur leurs différences.

    Il a ajouté la précision que si toutes les instances de TMyObject devaient accéder à une unique variable, il convenait de la déclarer dans la section implementation ou utiliser les variables de classe, disponibles depuis Delphi 2006. On peut même spécifier (à partir de Delphi ???) des membres strict private.
    Delphi 5 Pro - Delphi 10.4 Rio Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  5. #5
    Membre éclairé Avatar de peter27x
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 029
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 029
    Points : 757
    Points
    757
    Par défaut
    Citation Envoyé par tourlourou Voir le message
    Ph. B. n'a pas dit le contraire (toute instance de TMyObject a bien accès à ses propres champs privés) et bien précisé les différences entre les 2 codes exposés pour appuyer sur leurs différences.

    Il a ajouté la précision que si toutes les instances de TMyObject devaient accéder à une unique variable, il convenait de la déclarer dans la section implementation ou utiliser les variables de classe, disponibles depuis Delphi 2006. On peut même spécifier (à partir de Delphi ???) des membres strict private.
    Ha ok merci, j'avais mal compris les propos de PH.B, maintenant tout est clair, il a en effet tout à fait raison.
    Cependant l'auteur du post n'a peut être pas les connaissances suffisante en POO pour bien comprendre la notion de variable de classe Delphi.

  6. #6
    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
    Citation Envoyé par peter27x Voir le message
    Je suis dubitatif devant la réponse de PH.B, normalement, tout objet d'une classe a accès a ses membres privés, sinon à quoi servent ils ?
    J'ai placé la variable dans la partie privée de la classe par (bon !) réflexe.
    Je le fais systématiquement. Si la variable doit être accessible de l'extérieur, je rajoute une propriété, voire les accesseurs si ceux ci sont nécessaires pour réaliser un traitement complémentaire.
    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
    type
      TForm1 = class(TForm)
      private
        { Déclarations privées }
        FMaVariable1: Integer;
        FMaVariable2: Integer;
        function GetMaVariable2: Integer;
        procedure SetMaVariable2(AValue: Integer);
      public
        { Déclarations publiques }
        property MaVariable1: Integer read FMaVariable1 write FMaVaraible1;
        property MaVariable1: Integer read GetMaVariable2 write SetMaVariable2;
      end;
     
    implementation
     
    function GetMaVariable2: Integer;
    begin
      Result := FMaVariable2 div 2;
    end;
     
    procedure SetMaVariable2(AValue: Integer);
    begin
      FMaVariable2 := AValue * 2;
    end;
    Pour plus de détails sur la notion des variables de classe (bien que je pense au contraire que j'ai été clair ) comme pour les spécificités de visibilité étendue (strict private pour reprendre l'exemple de@tourlourou), je renvoie à cet article sur ce site même : Les possibles évolutions de D 2006
    et aussi à cet article : Nouveautés de Delphi depuis D7 (en anglais !)
    Philippe.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 11/02/2010, 17h37
  2. Réponses: 2
    Dernier message: 30/07/2009, 19h25
  3. Réponses: 2
    Dernier message: 23/05/2009, 00h00
  4. DLookup but sur variable avec une decimal
    Par Salsaboy60 dans le forum IHM
    Réponses: 2
    Dernier message: 27/02/2009, 01h23
  5. Problème avec port Série sur Win XP
    Par alexorel dans le forum MFC
    Réponses: 9
    Dernier message: 27/10/2005, 16h32

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