协变 逆变
主要用于泛型接口和委托中
协变就是支持泛型子类自动转泛型父类
逆变就是支持泛型父类自动转泛型子类
协变IEnumerable out
namespace System.Collections.Generic
{
//
// 摘要:
// Exposes the enumerator, which supports a simple iteration over a collection of
// a specified type.
//
// 类型参数:
// T:
// The type of objects to enumerate.
public interface IEnumerable<out T> : IEnumerable
{
//
// 摘要:
// Returns an enumerator that iterates through the collection.
//
// 返回结果:
// An enumerator that can be used to iterate through the collection.
IEnumerator<T> GetEnumerator();
}
}
逆变IComparable in
namespace System
{
//
// 摘要:
// Defines a generalized comparison method that a value type or class implements
// to create a type-specific comparison method for ordering or sorting its instances.
//
// 类型参数:
// T:
// The type of object to compare.
public interface IComparable<in T>
{
//
// 摘要:
// Compares the current instance with another object of the same type and returns
// an integer that indicates whether the current instance precedes, follows, or
// occurs in the same position in the sort order as the other object.
//
// 参数:
// other:
// An object to compare with this instance.
//
// 返回结果:
// A value that indicates the relative order of the objects being compared. The
// return value has these meanings: Value Meaning Less than zero This instance precedes
// other in the sort order. Zero This instance occurs in the same position in the
// sort order as other. Greater than zero This instance follows other in the sort
// order.
int CompareTo(T other);
}
}
逆变Action in
namespace System
{
//
// 摘要:
// Encapsulates a method that has a single parameter and does not return a value.
//
// 参数:
// obj:
// The parameter of the method that this delegate encapsulates.
//
// 类型参数:
// T:
// The type of the parameter of the method that this delegate encapsulates.
public delegate void Action<in T>(T obj);
}
.NET 中自带的斜变逆变泛型
IEnumerable<out T> //接口
Action<in T> //委托
Func<out TResult> //委托
IReadonlyList<out T>//接口
IReadonlycollection<out T>//接口