我正在编写一个类来表示Pivot集合,这是Pivot识别的根对象。 Collection有几个属性,一个facet类别列表(每个由FacetCategory
对象表示)和一个项目列表(每个由PivotItem
对象表示)。因此,极其简化的集合读取:
public class PivotCollection
{
private List<FacetCategory> categories;
private List<PivotItem> items;
// other attributes
}
我不确定如何正确授予对这两个列表的访问权限。由于用户可以看到构面类别和项目的声明顺序,因此我不能使用集合,但该类也不应允许重复的类别或项目。此外,我想使Collection对象尽可能易于使用。所以我的选择是:
让PivotCollection
实施IList<PivotItem>
并拥有FacetCategory
的访问权限方法:在这种情况下,可以通过编写{{1}将项目添加到集合foo
}}。这是有效的,但由于集合同样是两种类型的列表,因此它只作为一种类型(类别或项目)的列表传递,似乎是一种低于标准的解决方案。
为foo.Add(bar)
(List
和CategoryList
)创建嵌套包装类。这样做的好处是可以建立一致的界面,但缺点是这些属性不再能够用作列表(因为我需要覆盖我必须实现的非虚拟ItemList
方法Add
而不是子类IList
。隐式转换不起作用,因为这会将List
方法返回到其正常行为。
此外,由于我无法理解的原因,Add
缺少IList
方法......
AddRange
最后,第三个选项是组合选项1和2,以便public class PivotCollection
{
private class CategoryList: IList<FacetCategory>
{
// ...
}
private readonly CategoryList categories = new CategoryList();
private readonly ItemList items = new ItemList();
public CategoryList FacetCategories
{
get { return categories; }
set { categories.Clear(); categories.AddRange(value); }
}
public ItemList Items
{
get { return items; }
set { items.Clear(); items.AddRange(value); }
}
}
实现PivotCollection
并具有属性IList<PivotItem>
。
问题:这三个中哪一个最合适,为什么?