这里三种变化一般指的泛型,
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;