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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : 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
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
constructor Create;
begin
 FEventListeners := nil;
 FSequenceListeners := nil; 
end;
Et Fire initialize les variables FeventListeners et FSequenceListeners.

Voici la sequence d'utilisation
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;
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
 
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