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: p> < Pré> XXX PRE>
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: p> 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 <> p> mais je ne vois pas comment définir cela sans taper sans avoir à la taper La collection dans l'interface ... p> Toute aide (y compris toutes les solutions alternatives!) serait grandement apprécié! p> Merci, Ben P> P>
3 Réponses :
Créer une interface ou une classe de base non générique, qui inclut probablement tout code> Formfield code> fait sauf em> les bits spécifiques à ce type. Ensuite, vous pouvez avoir un icollection
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 i> 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 code>? 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
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
Voici un certain code pour compléter la réponse de Jon: et dans votre formulaire: p>
Une autre option (une alternative à La réponse de Jon ) est d'appliquer le motif de l'adaptateur strong>, qui peut être utile lorsque: Lorsque vous souhaitez exposer des bits spécifiques à un type, vous doit créer un wrapper implémenter ce comportement non générique dans un type de base briserait efficacement le Principe de substitution de Liskov , c'est pourquoi je préfère l'approche wrapper comme Je discute également dans mon poteau de blog . p> p> p>