C#中的协变、逆变

发布时间 2023-12-08 15:47:42作者: 误会馋

一、概述

1、在 C# 中,协变和逆变能够实现数组类型委托类型泛型类型参数的隐式引用转换。

2、按字面,可以这样理解:协变,感觉协和隐式引用转换;逆变,逆反直觉隐式引用转换

二、泛型中的协变和逆变

1、定义

(1)协变,使你能够使用比原始指定的类型派生程度更大的类型。你可以将 IEnumerable<Derived> 的实例分配给 IEnumerable<Base> 类型的变量。

(2)逆变,使你能够使用比原始指定的类型更泛型的类型(派生程度更小的类型)。你可以将 Action<Base> 的实例分配给 Action<Derived> 类型的变量。

(3)不变性,表示只能使用最初指定的类型。 固定泛型类型参数既不是协变,也不是逆变。你无法将 List<Base> 的实例分配给 List<Derived> 类型的变量,反之亦然。