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 –