Dites que vous écrivez une bibliothèque pour afficher des éléments à l'écran, vous devez donc créer une interface IDisplayable
. Cette interface a une méthode pour créer un contrôle à partir de l'objet: displayable.GetControl()
.Classes génériques avec des méthodes qui ne fonctionnent que pour certains paramètres de type
Vous souhaitez créer votre propre type de liste pouvant être affiché: MyList<T>
. Maintenant, cette liste ne peut être affichée que si T
est un IDisplayable
, donc vous pouvez demander dans la classe MyList que T devrait implémenter IDisplayable. Mais vous voulez aussi utiliser ce type de liste dans certains endroits où T n'est pas IDisplayable (et par conséquent cette liste ne sera pas affichable). Donc est-il possible de dire que MyList implémente IDisplayable si T implémente IDisplayable? Je serais également heureux si MyList<T>
implémente toujours IDisplayable mais déclenche une exception lors de l'exécution si vous essayez d'appeler GetControl()
si T n'est pas IDisplayable, mais j'aimerais savoir s'il existe un moyen statique de le faire. Cela peut-il être fait? Ou est-ce que je regarde la mauvaise solution?
Edit:
Je suis d'accord avec les suggestions jusqu'à présent que MyList peut avoir trop de responsabilités. Mon idée originale était de créer un MyDisplayableList<T> : MyList<T> (where T : IDisplayable)
.
Le problème avec cette approche est que j'ai beaucoup de méthodes qui prennent un MyList et retournent un MyList (par exemple des méthodes comme Select dans Linq). Donc, si j'utilise select sur une MyDisplayableList, je récupère une MyList et je ne peux pas l'afficher même s'il s'agit d'une MyList ... existe-t-il un moyen sûr de gérer ce problème en C#?
pourquoi voulez-vous aussi utiliser MyList pour les non-affichable Des classes? Il me semble que vous demandez à MyList de faire trop de choses, mais sans les raisons, c'est difficile à dire. –