Précédent   Forum du club des développeurs et IT Pro > Environnements de développement > Delphi > Langage
Langage Tout ce qui concerne le langage (POO, syntaxe, message d'erreur...)
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 22/12/2012, 22h57   #1
glandu.dulac
Invité de passage
 
Homme
Inscription : décembre 2012
Messages : 3
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : décembre 2012
Messages : 3
Points : 1
Points : 1
Par défaut Hiérarchie de classes

Bonjour,

Je suis en train de porter un programme VB.Net sous Delphi, je rencontre une difficulté concernant la hiérarchie des objets. Je tente une explication :

Mon programme .Net contient une classe Objet "Cube" et une classe coCubes collection de "Cube".

Parmi ses propriétés La classe Objet "Cube" compte également la classe coCubes, ça donne quelque chose du genre :
Code vb.net :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
public class clsCoCubes
 Private mcol As New SortedList(Of String, clsCube)
end class
 
Public Class clsCube
    private myCoCubes as clsCoCubes
 
    Public Property coCubes() As clsCocubes
        Get
            coCubes= myCoCubes 
        End Get
        Set(value As clsCoCubes)
            myCoCubes = value
        End Set
    End Property
end class

La même chose en Delphi (présentation simplifiée) ne fonctionne pas :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
Unit unitCube;
...
Interface
   type TCube=class
     myCubes:TCubes;
   end;
 
  type
    TCubes= class(TDictionary<string, TCube>)
    end;
...
Quelqu'un connaîtrait une solution ?

Merci !
glandu.dulac est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/12/2012, 09h31   #2
Paul TOTH
Expert Confirmé Sénior
 
Avatar de Paul TOTH
 
Homme Paul TOTH
Freelance
Inscription : novembre 2002
Messages : 4 405
Détails du profil
Informations personnelles :
Nom : Homme Paul TOTH
Âge : 43
Localisation : Réunion

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

Informations forums :
Inscription : novembre 2002
Messages : 4 405
Points : 10 756
Points : 10 756
en Pascal tout ce qui est utilisé doit être déclaré en amont...qui de la poule et de l'oeuf...

pour faire simple tu peux cependant prédéclarer une classe
Code :
1
2
3
4
5
6
7
8
9
10
11
 
type
  TClassA = class; // prédéclaration
 
  TClassB = class
    A: TClassA;
  end;
 
  TClassA = class // déclaration réelle
    B: TClassB;
  end;
pour cela suffit que les deux classes soient déclarées dans la même unité (et dans la même section "type"), si tu veux les déclarer dans deux unités différentes, voir mon article sur les références circulaires.
__________________
Developpez.com: Mes articles, forum FlashPascal
Entreprise: Execute SARL
Produits : UPnP, RemoteOffice, FlashPascal
Embarcadero : Ile de la Réunion, Dephi, C++Builder, RADPHP...TVA à 8,5%
Paul TOTH est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/12/2012, 09h34   #3
Andnotor
Rédacteur/Modérateur
 
Avatar de Andnotor
 
Inscription : septembre 2008
Messages : 2 856
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 2 856
Points : 5 967
Points : 5 967
Il suffit d'ajouter un déclaration "vide" avant TCube :

Code :
1
2
3
4
5
6
7
8
9
type
  TCubes = class;
 
  TCube = class
    myCubes :TCubes;
  end;
 
  TCubes = class(TDictionary<string, TCube>)
  end;
EDIT: Bref comme ci-dessus
__________________
Mes tutoriels Delphi
Andnotor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/12/2012, 09h46   #4
Cl@udius
Modérateur
 
Avatar de Cl@udius
 
Homme Claude Renouleaud
Développeur informatique
Inscription : février 2006
Messages : 4 860
Détails du profil
Informations personnelles :
Nom : Homme Claude Renouleaud
Âge : 50
Localisation : France, Hautes Pyrénées (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : février 2006
Messages : 4 860
Points : 9 970
Points : 9 970
Salut

Pour la prédéclaration (forward declaration) je m'étendrai pas sur le sujet, Paul et Andnotor l'on déjà fait.

Par contre, pas certain qu'il faille traduire SortedList par TDictionary<K,V>.
Un TList<T> ou TObjectList<T> serait peut-être suffisant.

@+
__________________
A la question technique que par MP/MV tu formuleras, la réponse aux oubliettes finira.
Cl@udius est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/12/2012, 10h42   #5
glandu.dulac
Invité de passage
 
Homme
Inscription : décembre 2012
Messages : 3
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : décembre 2012
Messages : 3
Points : 1
Points : 1
@ Andnotor et Paul TOTH : Excellent, la "forward" déclaration, ça fonctionne à merveille !

@ Cl@udius : c'est vrai qu'un TDictionary peut paraître "bourrin" mais j'ai besoin de la <key> string pour accéder rapidement à mes items. Ceci étant dit, c'est ma toute première appli Delphi et il me reste du chemin à parcourir avant d'avoir une connaissance suffisamment fine du langage, les bons réflexes et automatismes.

Merci à tous, épatant.
glandu.dulac est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 22h18.


 
 
 
 
Partenaires

Hébergement Web