La covariance, la contravariance et l'invariance décrivent comment la hiérarchie d'héritage de type existante change lorsqu'elle est soumise à une certaine transformation (comme l'utilisation dans les génériques).
Si la transformation conserve l'ordre de la hiérarchie d'origine, elle est "covariante".
S'il l'inverse, il est «contravariant».
S'il le casse, il est "invariant".
Selon ma compréhension, la fonction générique suivante en Java: public static <T extends Integer> T f(T x) {
Integer[] arr = new Integer[4];
T ret = ...
.NET 4 introduit la covariance. Je suppose que c'est utile. Après tout, les États membres ont traversé toutes les difficultés de l'ajouter à la langue C #. Mais ...