C#逆差
示例
什么时候是IComparer<T>不同的子类型IComparer<T1>?WhenT1是的子类型T。IComparer是逆变在其T参数,这意味着IComparer的亚型关系变为在相反的方向作为T的。
class Animal { /* ... */ }
class Dog : Animal { /* ... */ }
IComparer<Animal> animalComparer = /* ... */;
IComparer<Dog> dogComparer = animalComparer; // IComparer<Animal> is a subtype of IComparer<Dog>
// animalComparer = dogComparer; // Compilation error - IComparer<Dog> is not a subtype of IComparer<Animal>具有给定类型参数的对立泛型类型的实例可以隐式转换为具有更多派生类型参数的同一个泛型类型。
之所以成立,是因为IComparer消耗Ts而不产生它们。可以比较任意两个Animals的对象可以用于比较两个Dogs。
使用in关键字声明相反类型的参数,因为该参数只能用作input。
interface IComparer<in T> { /* ... */ }声明为相反类型的类型参数可能不会显示为输出。
interface Bad<in T>
{
T GetT(); //类型错误
}
热门推荐
1 训练狗狗憋尿
2 狗狗追踪训练
3 狗狗训练要多少钱
5 深圳狗狗训练
6 训练狗狗唤回
7 狗狗叫怎么训练
8 狗狗训练班
10 狗狗社会化训练
11 狗狗叫回训练
12 广州狗狗训练学校
13 狗狗训练躺下
14 狗狗随行训练
15 训练狗狗巡回
16 狗狗要怎么训练
17 狗狗喂食训练
18 训练狗狗躺下