我需要专门的集合类。我们称它们为 FooItems 和 BarItems。
我基本上需要列表的所有功能,但是当从集合中添加或删除新项目时,我需要做一些额外的工作。
我的第一个尝试是简单地从 List 和 List 派生,然后创建我自己的 Add 和 Remove 方法。这当然会创建一个隐藏副作用的函数,编译器建议使用“new”关键字来显式隐藏基类。
public class FooCollection : List<Foo>
{
public new void Add(Foo foo)
{
// Do my work then...
base.Add(foo);
}
}
不过这感觉很臭。如果有人通过 List 或 IList 引用引用 FooCollection,这可能会导致问题,因为它不会调用我的(非虚拟)Add 函数,而是调用 List 版本。
当然,在我当前的代码中,这不太可能发生……但人们永远无法预测未来。
当然,另一种选择是重新实现 IList 接口并包含列表,但这很容易违反 DRY(而且这也是很多工作,尤其是对于多个集合)。
我已经倾向于将收容作为首选方法......只是想知道是否有人对此有一些意见。