J'essaie la conception suivante sans succès:
abstract class Foo<T> { abstract T Output { get; } } class Bar { List<Foo> Foos; }
3 Réponses :
Liste
foo code> est un modèle et nécessite une classe spécifiée, même si c'est un générique lui-même (
Liste
Ce serait ça. Faire une barre générique (le paramètre Type peut être aussi, ou u, ou autre) et utilisez le paramètre Type pour garder FOO Open. Vous pouvez le faire aussi loin dans la hiérarchie du conteneur que vous avez le contrôle; Cependant, à un moment donné, vous devrez fermer la mise en œuvre générique avec un type concret afin de consommer la classe (ES). Si vous souhaitez le faire de manière dynamique, vous pouvez utiliser la réflexion pour instancier un objet générique fermé à un type identifié par un objet de type ou une chaîne, mais cela peut être rapide rapidement rapidement.
Non, vous ne pouvez pas utiliser de générique de telle de manière. Vous avez besoin d'ajouter un paramètre de type générique sur Exemple de la première p> BAR CODE> et de l'envoyer à
FOO
FOO
Je pense qu'il sait que. Ce n'est pas ce qu'il voulait dire.
@Timwi, alors l'OP devrait être plus clair dans la question. Face à une question ambiguë, il est très facile de donner une réponse incorrecte. Le bowvote pour moi et d'autres est injustifié. Par votre logique, je devrais vous indiquer pour avoir une interprétation différente de moi.
Je suis d'accord, je trouve aussi des questions ambiguës aussi gênantes. Il est trop facile de supposer que sa propre interprétation a raison - désolé pour ça! (Bien sûr, cela aiderait si @lazlo a jeté une lumière sur cette ...) (Gamezelda semble être d'accord avec moi, bien que :))
Désolé d'être incertain, même si je ne peux pas interpréter pourquoi JaredPar aurait pu penser que je devais le savoir. Ma question est en effet comment Timwi l'a interprété.
Si je vous comprends correctement, vous souhaitez une liste des objets code> FOO code> qui ont des types différents de la sortie Cependant, l'idée suivante pourrait aider. Que diriez-vous de déclarer une interface non générique appelée puis mettez-la dans votre classe abstraite: p> code> s, non? Étant donné que ces sorties sont de types différents, vous devrez utiliser des cases de toute façon.
ifoo code>: ¹ p>
// Type âIEnumerable<string>â (rather than âIEnumerable<object>â)!
var stringFoos = Foos.OfType<Foo<string>>().Select(f => f.Output);
Merci. :) exactement ce que je cherchais.
Dupliqué exact: