(56)C#里的协变(covariant)和逆变(contravariant)

Posted caimouse

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了(56)C#里的协变(covariant)和逆变(contravariant)相关的知识,希望对你有一定的参考价值。

C#里的协变(covariant)和逆变(contravariant)

在C#里引用这两个概念是干什么用的呢,主要为了范型类型转换使用的,比如下面的例子就不能编译通过:

//声明List

                     List<Human> listHuman = new List<Human>();

                     List<Chinese> listChinese = new List<Chinese>();

                     //在这里,会出现错误

                     List<Human> list = new List<Chinese>();

这里使用List<Human> list = new List<Chinese>()就会出错,因为两者的类型不一样,所以需要采用协变的概念来进行从派生类转换为基类,逆变就是从基类转换为派生类。

以上是关于(56)C#里的协变(covariant)和逆变(contravariant)的主要内容,如果未能解决你的问题,请参考以下文章

详解C#的协变和逆变

Scala的协变covariant(+),逆变contravariant(-),上界(<:),下界(;:)

Scala的协变covariant(+),逆变contravariant(-),上界(<:),下界(;:)

了解 C# 中的协变和逆变接口

c#泛型的协变和逆变

为啥 C# (4.0) 不允许泛型类类型中的协变和逆变?