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 宝宝生日祝福语大全简短