Salut tous,
Je suis un petit nouveau dans le delphi [Delphi 7][WinXP] mais j'ai toutefois une lourde expérience en Java. Et je me suis pris au jeu de faire une conception à la java avec en particulier l'utilisation d'interface c'est à dire en Delphi de IInterface. Et j'ai des comportement plutot bizarre concernant les affectations de variables.
Voici un rapide exposé de ma conception :
le Guid étant généré avec S+Ctrl+G
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 IService = interface procedure InitService; end
Une classe d'implémentation
L'implementation du constructor s'assure de mettre à nil toutes les variables.
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 TMyService = class(TInterfacedObject , IService) constructor Create; private FEventListeners : IInterfaceList; FSequenceListeners : IInterfaceList; public // Implementation de l'interface procedure InitService; //Implementation propre procedure fire; end
Et Fire initialize les variables FeventListeners et FSequenceListeners.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 constructor Create; begin FEventListeners := nil; FSequenceListeners := nil; end;
Voici la sequence d'utilisation
Et c'est là dans fire qu'apparait le problème.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 var l_list : IListInterface; l_service : IService; l_MyService : TMyService; begin l_list := TListInterface.Create; l_list.add(IService(TMyService.create )); l_service := l_list[i] as IService; l_service.init; l_MyService := TMyService(l_service); l_MyService.fire;
Bien que FEventListeners est été mis à nil dans le Create et bien il n'est pas nil et provoque donc une erreur lors de la nouvel création.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 procedure fire; begin if FEventListeners <> nil then FEventListeners := TListInterface.Create; end
Ici la variable est est une IInterfaceList mais j'ai aussi le cas avec d'autre type.
Est ce que quelqui'un peut m'expliquer ou m'aiguiller vers de la doc détailler sur les différents cast et en particulier dans l'utilisation des IInterface.
Merci
Et si quelqu'un a des problèmes en JAva - No problem
Partager