7
votes

Collection de types génériques

J'ai un objet (formulaire) qui contient une collection (.fields) que je veux contenir des instances d'une classe générique (formesField).

Lefield, tout simplement, est défini comme tel: < Pré> XXX

Cela me permet d'avoir Formfield, Formfield, etc. et cette partie fonctionne bien. Ce que je veux, c'est une collection de "formfields" quel que soit le type, mais je suis obligé de définir un type (il semble) tel que: xxx

quoi, je pense, Je veux, c'est une interface qui me permet de résumer les informations de type et de saisir ainsi la collection comme des instances de (pour exxample) iformfield pas Formfield <>

mais je ne vois pas comment définir cela sans taper sans avoir à la taper La collection dans l'interface ...

Toute aide (y compris toutes les solutions alternatives!) serait grandement apprécié!

Merci, Ben


0 commentaires

3 Réponses :


6
votes

Créer une interface ou une classe de base non générique, qui inclut probablement tout Formfield fait sauf les bits spécifiques à ce type. Ensuite, vous pouvez avoir un icollection . Évidemment, vous ne pourrez pas utiliser cela de manière fortement typée, en termes de type de champ utilisé - mais vous pouvez utiliser tous les bits de type non-type (par exemple, le nom et le formulaire).


5 commentaires

Merci Jon, mais si je vous comprends correctement, l'interface aurait effectivement tout sauf la propriété de la valeur, qui est un élément clé du formateur ..? Est-ce que j'essaie d'utiliser des génériques dans le mauvais sens peut-être?


@Ben: Considérez comment vous allez essayer de utiliser cette collection. Il pourrait avoir un mélange de différents types de champs de forme (int, chaîne, etc.). Comment essayeriez-vous d'utiliser les valeurs de ces champs de formulaire dans formulaire ? Vous ne les connaissez pas au moment de la compilation, ou vous serez explicitement lancé vers le bon type.


@Ben, vous pouvez déclarer une propriété de valeur dans l'interface iFormfield, mais vous devrez le déclarer comme objet. Dans la classe Formfield , déclarez la valeur en tant que T et implémenter IFormfield.Value explicitement.


ahh, bien sûr. Je regarde cela du mauvais angle. Bravo Jon, très apprécié


@Thomas levesque - Bravo Thomas, j'ai essayé avec la collection définie comme un objet de type et que cela me faisait des problèmes, mais je pense que Jon m'a incité à réévaluer ce que j'essaie de faire et comment! Merci pour ton aide



13
votes

Voici un certain code pour compléter la réponse de Jon: xxx

et dans votre formulaire: xxx


0 commentaires

1
votes

Une autre option (une alternative à La réponse de Jon ) est d'appliquer le motif de l'adaptateur , qui peut être utile lorsque:


0 commentaires