Vu le code suivant:Génériques: pourquoi pas compiler?
class A<T>
{
internal void Add(T obj) { }
}
class C { }
class B<T> where T : C
{
public B()
{
A<T> a = new A<T>();
a.Add(new C());
}
}
L'appel à Add
ne compile pas. Il fait quand je l'ai jeté à T
première:
a.Add((T)new C());
Il est peut-être la privation de sommeil, mais qu'est-ce que je manque ici?
Si T
est de type C
(notez la contrainte sur B
), alors pourquoi n'est pas A<T>
équivalent à A<C>
?
Merci, ça m'a échappé :) – JulianR
Mon esprit est officiellement soufflé. :) –
Mais seulement si ce n'était pas .NET 4 avec contravariance pour D et C dans B. –