Bonjour,
Je viens de faire un code représentatif de ce que je souhaite obtenir.
A savoir, déclarer une classe ancêtre ne connaissant que l'interface de l'objet, et dont l'instanciation fournisse un objet d'une classe descendante, qui implémente les méthodes. Afin de déléguer les détails du descendant à une autre unité ou librairie.
Ce type de code fonctionne en Delphi 5, mais je me heurte au portage sous Lazarus 0.9.30 FPC 2.4.2 Windows 7 :
Merci pour vos idées.
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51 type TMonAncetre = class(TObject) // classe de base private FField: integer; public constructor Create(aParam: integer); overload; function GetTruc: integer; virtual; abstract; end; TMonFils = class(TMonAncetre) // descendant chargé de l'implémentation private FTruc: integer; public constructor Create(aParam: integer); function GetTruc: integer; end; constructor TMonFils.Create(aParam: integer); begin inherited; FField:=aParam; FTruc:=-1; end; function TMonFils.GetTruc: integer; begin Result:=FTruc*FField; end; function CreateFils(aParam: integer): TMonAncetre; // fonction (CallBack si déclarée ailleurs) qui crée l'objet désiré begin Result:=TMonFils.Create(aParam); end; constructor TMonAncetre.Create(aParam: integer); // seule fonction à implémenter pour l'ancêtre var temp: TMonAncetre; begin // syntaxe initiale fonctionnelle en Delphi : self:=CreateFils(aParam); temp:=CreateFils(aParam); self:=temp; // le problème se pose là, je crois... mais pb de débugger end; procedure TForm1.Button2Click(Sender: TObject); var TestObject: TMonAncetre; begin TestObject:=TMonAncetre.Create(123); ShowMessage(IntToStr(TestObject.GetTruc)); TestObject.Free; end;
Partager