Supposons que j'ai le code suivant:Une façon d'avoir des paramètres de type déduits des autres contraintes de paramètres de type en C#?
interface IWidget
{
}
interface IWidgetFactory<TWidget>
where TWidget : IWidget
{
}
TWidgetFactory CreateFactory<TWidgetFactory, TWidget>()
where TWidgetFactory : IWidgetFactory<TWidget>
where TWidget : IWidget
{
return ...
}
Chaque fois que j'appelle CreateFactory()
je dois passer dans les deux paramètres de type TWidgetFactory et Twidget. Cela semble inutile, car TWidgetFactory a déjà une contrainte telle que toute spécialisation de celui-ci doit déjà spécifier TWidget. Y a-t-il un moyen de déduire automatiquement TWidget lorsque j'appelle CreateFactory()
, même si je dois ajouter des méthodes d'assistance supplémentaires?
(Ce qui précède est un exemple simple, mais il peut être bien plus compliquée dans la pratique, donc cela pourrait économiser beaucoup de complexité.)
Dans 'CreateFactory', avez-vous réellement besoin d'appeler une méthode dans' 'IWidgetFactory dont la signature contient un' TWidget'? –
Merci pour la réponse, j'utilise ce modèle où je n'ai pas besoin du type de TWidget. Si je l'utilise dans la méthode, cependant, y a-t-il un moyen de le déduire sans le transmettre explicitement? – EM0
Non, pas à ma connaissance. Les génériques manquent de la flexibilité requise pour le faire. –