Salut tout le monde,
J'ai plusieurs class avec des hértiages différents qui n'ont aucun parent en commun et je voudrais pourtant qu'elles disposent toutes de la meme méthode.
Comment dois je faire ?
Salut tout le monde,
J'ai plusieurs class avec des hértiages différents qui n'ont aucun parent en commun et je voudrais pourtant qu'elles disposent toutes de la meme méthode.
Comment dois je faire ?
En POO traditionnelle, c'est malheureusement impossible.
Il faudrait retrouver la méthode par RTTI ou éventuellement utiliser une Interface. (D'autres que moi seront plus à même de te donner plus d'indications. So stay tune.)
Tu as un exemple simple d'utilisation d'interface ?
oui
attention cependant si l'objet ne supporte aucune interface IUknown sera réclamée en plus de IMonInterface
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 type IMonInterface=interface procedure MaMethode; end; TMonButton=class(TButton, IMonInterface) procedure MaMethode; end; TMaClasse=class(TMonAncetre, IMonInterface) procedure MaMethode; end; procedure FaireQuelqueChose(AMonInterface : IMonInterface); begin AMonInterface.MaMethode; end; var MonButton : TMonButton; MaClasse : TMaClasse; begin MonButton := TMonButton.Create(nil); MaClasse := TMaClasse.Create; FaireQuelqueChose(MonBouton); FaireQuelqueChose(MaClasse); end;
et si tu ne veux pouvoir travailler sur une classe sans la dériver, tu peux toujours créer une classe supplémentaire :
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 type TButtonInterface=class(TInterfacedObject, IMonInterface) private FButton : TButton; procedure MaMethode; public constructor Create(AButton : TButton); end; var ButtonInterface : TButtonInterface; begin ButtonInterface := TButtonInterface(Button1); FaireQuelquechose(ButtonInterface); end;
En gros ça veut dire que l'interface définit un ensemble de méthode, mais est ce que je peux faire ça ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 type IMonInterface=interface procedure MaMethode; end; procedure IMonInterface.mamethode; begin showmessage('salut'); end;
non !
l'interface (comme pour une unité) ne produit aucun code, c'est jusque la déclaration des méthodes.
pour mettre du code, il faut un objet qui implémente l'interface (comme la partie implémentation d'une unité).
Partager