我已经指定了几个接口,我正在使用 Entity Framework 4 将它们实现为实体。我能想到的最简单的演示代码是:
public class ConcreteContainer : IContainer
{
public EntityCollection<ConcreteChild> Children { get; set; }
}
public class ConcreteChild : IChild
{
}
public interface IContainer
{
IEnumerable<IChild> Children { get; set; }
}
public interface IChild
{
}
我从上面收到以下编译器错误:
“Demo.ConcreteContainer”没有实现接口成员“Demo.IContainer.Children”。“Demo.ConcreteContainer.Children”无法实现“Demo.IContainer.Children”,因为它没有“System.Collections.Generic.IEnumerable”的匹配返回类型
我目前的理解是,这是因为IEnumerable(由 EntityCollection 实现)是协变的,但可能不是逆变的:
此类型参数是协变的。也就是说,您可以使用您指定的类型或任何派生度更高的类型。有关协变和逆变的更多信息,请参阅泛型中的协变和逆变。
我是否正确,如果是这样,有什么方法可以实现我的目标,即IContainer
纯粹根据其他接口而不是使用具体类来指定接口?
或者,我是否误解了更基本的东西?