Réponse acceptée !
Alors j'ai rapidement regardé le code que tu m'as envoyé et à mon avis tu as un problème de conception :
Une classe generic permet d'être construite avec un certain type, par exemple
List<string> s = new List<string>();
Tu remarques qu'une fois initialisé, tu ne peux plus changer le type de cette classe, ce qui est logique, car le contenu est de type String, on ne peut pas tout d'un coup y mettre un object "Arbre".
Si tu regardes les méthodes/property de l'object 's' ci-dessus, tu constates qu'il n'y a que des méthodes GENERIQUES qui n'ont rien avoir avec son type! Par exemple, une méthode Add, Remove, etc. A aucun moment on accède directement à l'object: logique, puisqu'on ne connait pas son type et qu'à priori ça peut être n'importe quoi!
Qui dit type générique implique fonctions génériques. Tu ne peux pas par exemple ajouter une méthode qui s'appelle GetNombreDePattes à ton object car si je met un object de type Radio [MonObject<Radio> radio = new MonObject<Radio>()] dans la collection, la méthode n'a plus aucun sens!!
Pour terminer, tu peux tout de même spécifier avec la clause (le mot clef) where que ton object generic doit implémenter une certaine interface ou dérivée d'une certaine classe : Ca te permet d'appeler des méthodes plus précise de l'object, càd:
public class Radio<T> where T : Vivant
{
}
Maintenant tu peux faire une méthode GetNombreDePatte car tu peux t'assurer que T sera un être vivant et que donc il aura des pattes

J'espère que c'est un peu plus clair...
-
Blog-