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 教师闺蜜祝福语简短