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