Si BaseFruit
a un constructeur qui accepte un int weight
, puis-je instancier un fruit dans une méthode générique comme celle-ci?Créer une instance de type générique?
public void AddFruit<T>()where T: BaseFruit{
BaseFruit fruit = new T(weight); /*new Apple(150);*/
fruit.Enlist(fruitManager);
}
Un exemple est ajouté derrière les commentaires. Il semble que je ne peux le faire que si je donne BaseFruit
un constructeur sans paramètre et ensuite remplir tout à travers les variables membres. Dans mon vrai code (pas sur les fruits), c'est plutôt impraticable.
-Update-
Il semble donc qu'il ne peut pas être résolu par des contraintes de quelque façon alors. D'après les réponses, il y a trois solutions candidats:
- Motif usine
- de réflexion
- Activator
Je tends à penser la réflexion est la moins propre, mais je ne peux pas décider entre la deux autres.
BTW: aujourd'hui je résoudrais probablement cela avec la bibliothèque IoC de choix. –