1
IEnumerable<T>
是协变的IEnumerable
IEnumerable<Animal> Animals = new List<Monkey>()
如果Monkey
从Animal
派生。
但是为什么我不被允许进行以下操作?
interface ICage
{
IEnumerable<Animal> Animals { get; }
}
class MonkeyCage : ICage
{
IEnumerable<Monkey> Animals { get; }
}
有没有可能做到这一点?如果不是,为什么?
因为'IEnumerable的'不匹配接口预期确切的签名。你不能做一个接口的协变替换。你可以做一些像'ICage 其中T:Animal',然后它是'IEnemurable Animals {get; }' –
willaien
@willaien所以接口的实现总是必须精确匹配?这是否有很好的理由? –
@stuartd但猴子是动物。无论如何,我想我自己找到了答案:http://stackoverflow.com/a/7996843/4961688 –