[Delphi 7] Affection Variable non controlé avec IInterface
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 :
Code:
1 2 3 4 5
|
IService = interface
procedure InitService;
end |
le Guid étant généré avec S+Ctrl+G
Une classe d'implémentation
Code:
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 |
L'implementation du constructor s'assure de mettre à nil toutes les variables.
Code:
1 2 3 4 5
| constructor Create;
begin
FEventListeners := nil;
FSequenceListeners := nil;
end; |
Et Fire initialize les variables FeventListeners et FSequenceListeners.
Voici la sequence d'utilisation
Code:
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; |
Et c'est là dans fire qu'apparait le problème.
Code:
1 2 3 4 5 6 7
|
procedure fire;
begin
if FEventListeners <> nil then
FEventListeners := TListInterface.Create;
end |
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.
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