object> list = new List(); 这个为什么就可以
A: 这就要讲到C#泛型里的逆变协变了
Q: 细嗦细嗦
逆变协变
C#泛型中的逆变(in)协变(out)对于不常自定义泛型的开发来说..., 可以进行符合直觉且和谐的转化
前编中提到的代码例子不适用并且也不能改造成协变, 只适合使用逆变
相比于符合直觉且和谐的协变, 逆变是不符合直觉并且别扭的
IFace item = new..., 与协变相似, 需要在泛型 T 之前加上关键词 in
对比上方的协变, 逆变看起来就像是将基类赋值给子类, 但这其实符合里氏代换的
当我们调用 item.Print 时, 看起来允许传入的参数为 string...类型, 而实际上最终调用的 Face.Print 是支持 object 的, 传入 string 类型的参数没有任何问题
逆变协变的作用
逆变(in)协变(out)的作用就是扩展泛型的用法...A: 简单来说, 有关泛型输入的用逆变, 关键词是in, 有关泛型输出的用协变, 关键词是out, 如果接口中既有输入又有输出, 就不能用逆变协变
Q: 为什么这两个不能同时存在?