我有个朋友, 在使用的过程中发现一个问题
IFace item = new Face(); // CS0266
public interface IFace
{...A: 这就要讲到C#泛型里的逆变协变了
Q: 细嗦细嗦
逆变协变
C#泛型中的逆变(in)协变(out)对于不常自定义泛型的开发来说(可能)是个很难理解的概念, 简单来说其表现形式如下
逆变(..., 什么时候可以用协变, 这两个东西用起来有什么限制?...A: 协变的表现形式为将子类赋值给基类, 当进行输出相关操作时, 输出的对象类型为基类, 是将子类转为基类, 你可以说子类是基类;
逆变的表现形式为将基类赋值给子类, 当进行输入相关操作时, 输入的对象为子类..., 是将子类转为基类, 这个时候你也可以说基类是子类;
如果同时支持逆变协变, 若先进行子类赋值给基类的操作, 此时输出的是基类, 子类转为基类并不会有什么问题, 但进行输入操作时就是在将基类转为子类,