表中的协方差

本文关键字:方差 | 更新日期: 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
}