我有以下接口声明:

interface IOrder<T> where T: IOrderItem
{
     IList<T> Items { get; set; }
}

interface IOrderItem
{
     IOrder<IOrderItem> Parent { get; set; } // What do I put here?
}

我希望列表中的项具有对header对象的引用,以便它可以使用header中的id和其他字段。
在我的具体类中,它抱怨我没有正确地实现“parent”。
class StoreOrder : IOrder<StoreOrderItem>
{
    public IList<StoreOrderItem> Items { get; set; }
}

class StoreOrderItem : IOrderItem
{
    public StoreOrder Parent { get; set; } // This doesn't satisfy the interface
}

我尝试将IOrderItem设置为IOrderItem<T>并传入父类型,但这会导致循环引用,因为头类需要item类类型…我搞糊涂了。
对如何正确实施这一点有什么建议吗?

最佳答案

如果您这样定义接口:

interface IOrder<T> where T : IOrderItem<T>
{
    IList<T> Items { get; set; }
}
interface IOrderItem<T> where T : IOrderItem<T>
{
    IOrder<T> Parent { get; set; }
}

然后,您可以这样实现它们以获得您期望的功能:
class StoreOrder : IOrder<StoreOrderItem>
{
    public IList<StoreOrderItem> Items { get; set; }
}
class StoreOrderItem: IOrderItem<StoreOrderItem>
{
    public IOrder<StoreOrderItem> Parent { get; set; }
}

09-13 13:25