我需要專門的集合類。我們稱他們爲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接口幷包含List,但這種干擾違反(也是很多工作,特別是對於多個集合)。
我已經傾向於遏制作爲首選的方法..只是想知道是否有其他人對此有一些輸入。