C# 泛型接口的抗变和协变

2019-12-30 16:57:39于海丽

接口完全没问题,但是,囧,main方法中12行依然报错,wtf?

因为泛型类型是用in来标注的,这表示该泛型只支持抗变,12行代码是协变,所以会报错。

到此,泛型接口的抗变和协变也就解释完毕,总结如下3点,

①泛型接口,如果泛型类型前没有关键字out或者in来标注,则该泛型接口不支持抗变和协变,即只能是什么对象指向什么类型。

②如果泛型接口,泛型类型前有关键字out标注,则表示其方法的输出为T类型,也就是方法的返回值。同时该泛型接口支持协变,即,可以用父类的类型指向子类的对象。

③如果泛型接口,泛型类型前面有关键字in标注,则表示其方法的输入为T类型,也就是方法的参数。该泛型接口支持抗变,也就是可以用子类的类型指向父类的对象。

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持ASPKU!


注:相关教程知识阅读请移步到c#教程频道。