Bonjour,
J'utilise Delphi 2009 et les generics en abondance. Mais je rencontre un problème avec ce code :
donc comme vous pouvez le remarquer, il y a dépendance circulaire entre IDAO<T : class, IPersistentObject<T>> qui renvoi un TPersistentList<T> et TPersistentList<T : class, IPersistentObject<T>> qui garde un référence vers IDAO<T>
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
27 interface uses Generics.Collections, Classes; type TPersistentList<T : class, IPersistentObject<T>> = class(TObjectList<T>) private FAssociatedDAO : IDAO<T>; public constructor Create(AssociatedDAO : IDAO<T>); destructor Destroy; override; function GetById(Id : Integer) : T; procedure Update(ToUpdate : T); procedure Save; end; IPersistentObject<T : class> = interface (IInterface) function GetId : Integer; procedure SetId(Id : Integer); end; IDAO<T : class, IPersistentObject<T>> = interface(IInterface) function GetList() : TPersistentList<T>; end;
Je suis donc obligé de déclarer des classes en forward déclaration en en-tête de la partie interface mais voila, je n'arrive pas à déclarer correctement avec les generics !!
Si je déclare :
J'ai l'erreur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 type IPersistentObject<T> = interface; IDAO<T : class, IPersistentObject<T>> = interface;
au niveau de la déclaration :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 [DCC Erreur] BaseDAO.pas(41): E2037 La déclaration de 'IDAO<T>' diffère de la déclaration précédente
J'ai essayé de mettre en forward declaration : IDAO<T> = interface; IDAO<T : class> = interface;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 IDAO<T : class, IPersistentObject<T>> = interface(IInterface) function GetList() : TPersistentList<T>; end;
Toujours le même message d'erreur !
Si quelqu'un à une idée ...
Partager