bonjour à tous.
J'ai une classe Maillon qui hérite de UserControl. Ensuite, j'ai plusieurs classes qui héritent de Maillon: MaillonVert et MaillonRouge (ce n'est pas comme á en vérité mais c'est plus simple présenté ainsi).
Ma classe Maillon possède une fonction virtuelle DoWork(), laquelle est implémentée par MaillonVert et MaillonRouge.
Enfin, j'ai une Winform, ma form principale de l'appli, qui créée et affiche des Maillons dynamiquement. Ma form contient une Collection de controles (comme toutes les winforms), nommée Controls. C'est cette collection que je modifie pour manipuler mes maillons.
Mais le problème, c'est que comme mes Maillons sont stockés dans cette collection en tant que UserControl, lorsque je veux appeler mes fonctions de Maillons, je dois d'abord caster les éléments en Maillon. Ce qui rend impossible l'utilisation du polymorphisme sur les fonctions membres.
Mon code ressemble à ceci:
Note: La collection Controls n'est "pas à moi", c'est une variable membre de Winform.
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 class Maillon : UserControl { internal virtual void DoWork() {} } class MaillonVert : Maillon { internal override void DoWork() { Console.Write( "vert" ) }; } class MaillonRouge : Maillon { internal override void DoWork() { Console.Write( "rouge" ) }; } // ***************************** // et dans ma form principale: private void AjouterMaillonVert() { Controls.Add( new MaillonVert() ); } private void AjouterMaillonRouge() { Controls.Add( new MaillonRouge() ); } private void DoWork() { for (int i = 0; i < Controls.Count; i++) ((Maillon)Controls[ì]).DoWork(); // je suis obligé de caster en Maillon pour appeler doWork() }
Le problème c'est que le code ci-dessus appelle la fonction DoWork de la classe mère (Maillon), et non des classes filles. Or moi je voudrais appeler DoWork() des classes filles (MaillonVert et MaillonRouge). Comment puis-je faire?
Partager