Problème de modélisation avec des classes génériques
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.
Code:
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 IColonne
Code:
1 2 3 4 5 6 7 8 9 10 11 12
|
namespace test
{
public interface IColonne
{
IList<ICellule> Cellules
{
get;
set;
}
}
} |
L'interface ICellule
Code:
1 2 3 4 5 6 7 8 9 10 11 12
|
namespace test
{
public interface ICellule
{
Object Valeur
{
get;
set;
}
}
} |
Ma classe de Colonne Générique
Code:
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;
}
}
}
} |
Je ne comprend pas pourquoi j'ai l'erreur de conversion impossible ici8O
Et ma classe de Cellule générique
Code:
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;
}
}
}
} |
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?
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.