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(); //类型错误
}
热门推荐
10 祝女儿简短祝福语大全
11 大学新年祝福语简短创意
12 元旦适合的祝福语简短
13 朋友出远门祝福语简短
14 初六简短的祝福语
15 祝男孩生日祝福语简短
16 同事调离的祝福语简短
17 拜年红包的祝福语简短
18 妈妈生日祝福语简短励志