(Pour cela, je suppose que vous créé ICommand<T>
)
Cela ne fait pas vraiment de sens ... penser à la ligne:
//where aString is either myNamedInstance1 or myNamedInstance2
var someType = ObjectFactory.GetNamedInstance(aString);
Supposons maintenant que vous êtes ne va pas utiliser var
, et à la place le type réel. Que mettriez-vous là-bas qui pourrait compiler? Autrement dit, quel type peut someType peut-être autre que object
?
Aussi, rappelez-vous que ICommand<string>
et ICommand<int>
sont les deux types construits à partir ICommand<T>
, mais ne sont pas liés par ailleurs - ils ont aucun type de base commune autre que object
.
Si vous n'avez pas le type avant l'exécution, les génériques ne vont pas aider beaucoup - faites plutôt en sorte que votre ICommand<T>
hérite d'une interface commune - comme ICommandBase
- qui a les méthodes dont vous avez réellement besoin.
Cependant, si vous ne savez pas le type dans cette méthode, vous pouvez pousser l'inconnu « vers le haut » dans la compilation en faisant la méthode contenant ce générique:
public void Execute<T>(string commandName)
{
var someType = ObjectFactory.GetNamedInstance<ICommand<T>>(commandName);
someType.Execute();
}
Maintenant l'appelant d'exécuter a besoin du type param ... mais encore une fois vous pourriez pousser cela. Notez que vous aurez éventuellement besoin du paramètre type.
merci pour votre réponse – Luka