协变与逆变:方向模拟器
选择接口方向和转换,观察编译器为何接受或拒绝。示例中的
Dog : Animal
。
接口
IProducer<out T>(产出)
IConsumer<in T>(消费)
IBox<T>(不变)
赋值方向
Dog → Animal
Animal → Dog
out
安全地产出更具体对象,再把它当作更一般对象读取。
in
能处理一般对象的消费者,也一定能处理更具体对象。