Je suis aux prises avec des génériques. Voici ma configuration:Générique dans la contrainte de type
interface I<T> { }
[...]
void Add<T>(T obj) where T : I<??> { }
Comment puis-je faire en sorte que T
dans la méthode Add
implémente I
?
Je suis aux prises avec des génériques. Voici ma configuration:Générique dans la contrainte de type
interface I<T> { }
[...]
void Add<T>(T obj) where T : I<??> { }
Comment puis-je faire en sorte que T
dans la méthode Add
implémente I
?
La signature suivante permettra Add
de prendre toute T
qui implémente I<>
avec tous les paramètres de type.
void Add<T,S>(T obj) where T : I<S> {
}
L'inconvénient d'utiliser cette signature de la méthode est que l'inférence de type ne se déclenche pas et vous devez spécifier tous les paramètres de type, ce qui semble carrément stupide:
blah.Add<I<int>, int>(iInstance);
beaucoup plus simple approche consiste à utiliser la signature ci-dessous:
void Add<T>(I<T> obj) {
}
'void Ajoutez
Vous devez transmettre le paramètre T pour l'ajouter également.
void Add<TI, TAny>(TI obj) where TI : I<TAny>
'TI' est un paramètre générique, pas un générique lui-même, donc vous ne pouvez pas faire «TI
Désolé - 'add' est pas partie de l'interface' I' mais une méthode sur une autre classe –