方差
通用接口和委托可以分别使用 out
和 in
关键字将其类型参数标记为协变或逆变 。然后,这些声明将被用于类型转换,包括隐式和显式,以及编译时和运行时。
例如,现有的界面 IEnumerable<T>
已被重新定义为协变:
interface IEnumerable<out T>
{
IEnumerator<T> GetEnumerator();
}
现有的接口 IComparer 已被重新定义为逆变:
public interface IComparer<in T>
{
int Compare(T x, T y);
}