C# Language Variance


Exemple

Les paramètres et les délégués génériques peuvent avoir leurs paramètres de type marqués comme covariant ou contravariant en utilisant respectivement les mots-clés out et in . Ces déclarations sont ensuite respectées pour les conversions de types, à la fois implicites et explicites, ainsi que pour la compilation et l'exécution.

Par exemple, l'interface existante IEnumerable<T> a été redéfinie comme étant covariante:

interface IEnumerable<out T>
{
    IEnumerator<T> GetEnumerator();
}

L'interface existante IComparer a été redéfinie comme étant contravariante:

public interface IComparer<in T>
{
    int Compare(T x, T y);
}