Iro*_*fin 5 .net c# generics interface .net-4.0
我有以下接口声明:
interface IOrder<T> where T: IOrderItem
{
IList<T> Items { get; set; }
}
interface IOrderItem
{
IOrder<IOrderItem> Parent { get; set; } // What do I put here?
}
Run Code Online (Sandbox Code Playgroud)
我希望列表中的项目具有对标题对象的引用,因此它可以使用标题中的ID和其他字段.
在我的具体课程中,它抱怨我没有正确实现"父".
class StoreOrder : IOrder<StoreOrderItem>
{
public IList<StoreOrderItem> Items { get; set; }
}
class StoreOrderItem : IOrderItem
{
public StoreOrder Parent { get; set; } // This doesn't satisfy the interface
}
Run Code Online (Sandbox Code Playgroud)
我尝试设置IOrderItemas IOrderItem<T>并传入Parent类型,但由于Header类需要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; }
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以像这样实现它们以获得您期望的功能:
class StoreOrder : IOrder<StoreOrderItem>
{
public IList<StoreOrderItem> Items { get; set; }
}
class StoreOrderItem: IOrderItem<StoreOrderItem>
{
public IOrder<StoreOrderItem> Parent { get; set; }
}
Run Code Online (Sandbox Code Playgroud)