Bonjour,
Suite à mon précédent sujet concernant la modélisation avec des classes génériques, j'ai tenté quelques techniques, mais sans succès.
J'espère que quelqu'un pourra m'expliquer ce que j'ai loupé, ou pas compris dans les classes suivantes.
La classe Feuille qui contient une liste de Colonne.
L'interface IColonne
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 namespace test { public class Feuille { /// Liste des colonnes de la feuille private IList<IColonne> colonnes; public Feuille() { this.colonnes = new List<IColonne>(); } public IList<IColonne> Colonnes { get { return this.colonnes; } set { this.colonnes = value; } } } }
L'interface ICellule
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 namespace test { public interface IColonne { IList<ICellule> Cellules { get; set; } } }
Ma classe de Colonne Générique
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 namespace test { public interface ICellule { Object Valeur { get; set; } } }
Je ne comprend pas pourquoi j'ai l'erreur de conversion impossible ici
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 namespace test { public class Colonne<T> : IColonne { private IList<ICellule> list = new List<Cellule<T>>(); //Sur cette donnée membre, Visual me dit qu'il ne peut pas convertir Cellule<T> en ICellule. Mais Cellule<T> implémente l'interface ICellule public IList<ICellule> Cellules { get { return list; } set { list = value; } } } }
Et ma classe de Cellule générique
Dans cette classe, j'aurais apprécié que la propriété Valeur ai le type T et non pas Object. Mais T ne correspond pas à la signature de ICellule.Valeur. La aussi comment feriez-vous?
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 namespace test { public class Cellule<T> : ICellule { private T valeur; public Object Valeur //Ici j'aurais préféré mettre public T Valeur, mais la signature ne correspond pas à l'interface ICellule. { get { return valeur; } set { valeur = (T)value; } } } }
C'est le code le plus propre que j'aimerai implémenter mais cela ne compile pas, et ce malgré l'utilisation d'interfaces non génériques.
La contrainte principale est que une Colonne<T> ne puisse contenir qu'une IList<Cellule<T>>
Comment solutionneriez-vous ceci? parce que la je tourne en rond sans trouver LA solution.
Un énorme MERCI, à celui, ceux, qui m'aideront à résoudre ce problème.
Partager