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 :

Deux classe portant le meme nom dans deux unités differentes


Sujet :

Delphi

  1. #1
    Membre confirmé
    Avatar de Jcpan
    Inscrit en
    Août 2008
    Messages
    542
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 542
    Points : 475
    Points
    475
    Par défaut Deux classe portant le meme nom dans deux unités differentes
    Bonjour
    En déclarant une classe portant le meme nom dans deux unités differentes 'unit2 ,unit3), et fesant appel a cette classe d'une 3 unités(unit1), Delphi crée l'instance de la classe contenu dans unit3.

    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
    
    unit Unit2;
    
    interface
    uses dialogs;
    
    type
    tobjet1 = class
    Hlm : string;
    procedure salut ;
    
    protected
    fcouleurpref : string ;
    public
    constructor create ;
    destructor destroy ;
    property couleurpref : string read fcouleurpref write fcouleurpref ;
    end;
    implementation

    ///////////////////

    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
    
    unit Unit3;
    
    interface
    uses dialogs;
    
    type
    tobjet1 = class
    Hlm : string;
    procedure salut ;
    
    protected
    fcouleurpref : string ;
    public
    constructor create ;
    destructor destroy ;
    property macouleur : string read fcouleurpref write fcouleurpref ;
    end;
    implementation
    Normalement il devait y avoir exception ou conflit.

    Merci de M'éclairer

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 612
    Points : 25 303
    Points
    25 303
    Par défaut
    On a deux fois l'Unit2 et pas Unit3.


    Et sinon Delphi, utilise une seule déclaration, ça dépend l'ordre des uses, d'abord ceux dans la partie implementation, puis ceux dans interface, après je ne sais plus dans quel ordre, si tu veux être sur ajoute le nom de l'unité devant la classe genre "Unit2.TObject1", et le mieux étant de l'éviter ...

  3. #3
    Membre confirmé
    Avatar de Jcpan
    Inscrit en
    Août 2008
    Messages
    542
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 542
    Points : 475
    Points
    475
    Par défaut
    Merci

  4. #4
    Expert éminent sénior

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Points : 10 154
    Points
    10 154
    Par défaut
    Parmi une lise de uses, l'ordre de recherche se fait du dernier au premier. Donc si tes uses sont uses Unit2, Unit3; la recherche se fera d'abord dans Unit3.

  5. #5
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 612
    Points : 25 303
    Points
    25 303
    Par défaut
    Merci, SJRD, j'ai longtemps pensé que c'était l'inverse, mais un récent problème à ce sujet, m'a fait pensé que c'etait du dernier au premier, et tu le confirmes, ...

  6. #6
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 949
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 949
    Points : 5 665
    Points
    5 665
    Par défaut
    Hie,

    La première question à se poser est :

    Pourquoi donner le même nom à 2 classes, même dans des unités différentes ?

  7. #7
    Membre confirmé
    Avatar de Jcpan
    Inscrit en
    Août 2008
    Messages
    542
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 542
    Points : 475
    Points
    475
    Par défaut
    juste un étude de cas

  8. #8
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 436
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 436
    Points : 5 851
    Points
    5 851
    Par défaut
    salut

    tu peut te servir de cette methode pour "Hacker" un composant

    on peut s'en servir par exemple pour overrider le CreateEditor du stringGrid
    plutôt que de recréer un composant et le mettre dans la palette delphi
    et aussi pour ne pas réécrire toutes ton appli tu trompe délibérément
    le compilateur

    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
     
    TStringGrid = Class(Grids.TStringGrid)
        function CreateEditor: TInplaceEdit; Override;
     end; 
     
    ...
    Type
      TFooClass = class(TControl);
     
    function TStringGrid.CreateEditor: TInplaceEdit;
    var
      Scaling : Boolean;
    begin
      result := Inherited CreateEditor;
      Scaling := Screen.Width <= 1024;
      if Scaling and (Screen.PixelsPerInch<>120) then
      begin
        TFooClass(result).Font.Height := (Font.Height div -13) * TFooClass(result).Font.Height;
      end;
      TFooClass(result).Font.Color := ClNavy;
    end;
    mais c'est juste une figure de style

    @+ Phil

Discussions similaires

  1. Réponses: 2
    Dernier message: 12/06/2011, 16h04
  2. Probleme d'une meme declaration dans deux classes
    Par zouari.rami dans le forum Débuter
    Réponses: 1
    Dernier message: 04/12/2010, 11h25
  3. Réponses: 4
    Dernier message: 10/10/2007, 15h31
  4. [MySQL] Récuéprer deux champs au meme nom dans un Innerjoin
    Par easyjava dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 06/10/2006, 12h25
  5. [MySQL] Sélectionner deux champs du meme nom dans deux tables
    Par Msieurduss dans le forum PHP & Base de données
    Réponses: 12
    Dernier message: 14/06/2006, 22h54

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