表中的协方差
本文关键字:方差 | 更新日期: 2023-09-27 18:12:45
如何正确设计以下模型?我有两个班的图书馆。库2引用库1。但是库1 没有库2的引用。
图书馆1:public class BaseData
{
/*Some Properties*/
}
public class BaseGroup
{
/*Some data*/
public List<BaseData> DataList;
}
图书馆2:public class ChildData : BaseData
{
/*Some more data*/
}
public class ChildGroup
{
/*Some more data*/
public List<ChildData> DataList;
}
我如何设计这些模型,使我有一个列表。该清单可在图书馆1启动,然后在图书馆2更新。同样来自库2,我需要将ChildGroup
对象传递给库1方法,该方法将BaseGroup
作为参数。
你不能让List<T>
协变——它是不变的,你对此无能为力。例如,您不能将List<Apple>
视为List<Fruit>
,因为您不能在其上调用list.Add(new Orange())
。
在我看来,你应该让你的baseGroup
类泛型,有一个约束。然后你可以让childGroup
从它派生:
所以-固定类名以遵循。net命名约定:
public class BaseData {}
public class BaseGroup<T> where T : BaseData
{
public List<T> DataList;
}
public class ChildData : BaseData {}
public class ChildGroup : BaseGroup<ChildData>
{
// No need for a separate list here
}