方差

通用接口和委托可以分别使用 outin 关键字将其类型参数标记为协变逆变 。然后,这些声明将被用于类型转换,包括隐式和显式,以及编译时和运行时。

例如,现有的界面 IEnumerable<T> 已被重新定义为协变:

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

现有的接口 IComparer 已被重新定义为逆变:

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