C#逆变,协变,不变

这里三种变化一般指的泛型,

Covariance协变,当值作为返回值输出是(例:IEnumerable)

Contravariance逆变,当值作为输入的时候(例:Action)

Invariance不变,当值既是输入也是输出(例:IList)

1.这个协变是没问题的

因为他不能再添加元素,这是安全的,所以他可以进行

IEnumerable<string> strings=new List<string>{"a","b"};
IEnumerable<Object> object=strings;

2.这个不变是不成功的

因为他可以再继续添加元素

IList<string> strings=new List<string>{"a","b"};
IList<Object> objects=strings;

比如

objects.Add(ne Object());

这样就在添加之前就会报错

3.逆变是成功的

Action<object> objects =obj=>Console.Write(obj);
Action<string>  strings =objects;

 

posted @ 2020-05-23 13:01  蔡老板2019  阅读(107)  评论(0编辑  收藏  举报