类型, 而实际上最终调用的 Face.Print 是支持 object 的, 传入 string 类型的参数没有任何问题
逆变协变的作用
逆变(in)协变(out)的作用就是扩展泛型的用法..., 帮助开发者更好地复用代码, 同时通过约束限制可能会出现的破坏类型安全的操作
逆变协变的限制
虽然上面讲了逆变(in)协变(out)看起来是什么样的, 但我的那个朋友还是有些疑问
Q: 那我什么时候可以用逆变...A: 协变的表现形式为将子类赋值给基类, 当进行输出相关操作时, 输出的对象类型为基类, 是将子类转为基类, 你可以说子类是基类;
逆变的表现形式为将基类赋值给子类, 当进行输入相关操作时, 输入的对象为子类..., item.First()的输出类型为object, 实际类型是string, 此时说string是object没有任何问题, 协变可以正常发挥作用;
但是如果支持了逆变, 假设我们进行输入类型的操作..., item.Add() 允许的参数类型为 object, 可以是任意类型, 但是实际上支持string类型, 此时的object绝无可能是string
Q: 好像听懂了一点了, 我以后慢慢琢磨吧