IEnumerable<T>
是协变的。这意味着我可以做
IEnumerable<Animal> Animals = new List<Monkey>()
如果Monkey
来自Animal
。
为什么我不允许做以下事情?
interface ICage
{
IEnumerable<Animal> Animals { get; }
}
class MonkeyCage : ICage
{
IEnumerable<Monkey> Animals { get; }
}
有可能实现这一目标吗?如果没有,为什么?
答案 0 :(得分:0)
这是不可能的,因为C#中的接口实现必须匹配接口中定义的确切签名。
Eric Lippert在这篇文章中可以找到关于为什么会出现这种情况的一些信息: https://stackoverflow.com/a/7996843/4961688