我有以下接口声明:
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; }
}