私は特殊なコレクションクラスが必要です。それらをFooItemsとBarItemsと呼びましょう。特殊なコレクションを作成するときに継承または包含を優先しますか?
私は基本的にリストのすべての機能を必要としますが、新しいアイテムがコレクションに追加されたり削除されたりすると、余分な作業が必要になります。
私の最初のスタブは、単にリストとリストから派生してから、自分のAddメソッドとRemoveメソッドを作成することでした。これはもちろん、副作用を隠す関数を作成し、コンパイラは "new"キーワードを使って明示的に基底クラスを隠すことを提案します。
public class FooCollection : List<Foo>
{
public new void Add(Foo foo)
{
// Do my work then...
base.Add(foo);
}
}
これは嫌な感じです。これは、私の(非仮想の)Add関数を呼び出さず、リストバージョンであるため、誰かがListまたはIList参照を介してFooCollectionを参照すると問題を引き起こす可能性があります。
私の現在のコードでは、それは起こりそうもありませんが、未来を予測することはできません。
もちろん、IListインターフェイスを再実装してListを含めることもできますが、DRY違反の臭いがあります(特に複数のコレクションでは多くの作業があります)。
私はすでに好ましい方法として封じ込めに傾いています。他の誰かがこれに何らかの入力をしているのではないかと思っています。