そのため、CollectionBase をカスタム コレクションの継承クラスとして利用しています。知識を繰り返さないように(DRYの原則に従って)、抽象クラスを介してCollectionBaseを利用しています。抽象クラスもジェネリック クラスとして定義されます。クラスを実装する方法は次のとおりです。
public abstract class GenericCollectionBase<T,C> : CollectionBase
{
//Indexders, virtual methods for Add, Contains, IndexOf, etc
}
私はこれを利用しているので、これらの基本メソッドを 10 以上のクラスに実装する必要はありません。
私の質問は、次のように Equals メソッドをオーバーライドするときに、これをやりすぎているかどうかです。
public override bool Equals(object obj)
{
if (obj is C)
{
GenericCollectionBase<T, C> collB =
obj as GenericCollectionBase<T, C>;
if (this.Count == collB.Count)
{
for (int i = 0; i < this.Count; ++i)
{
if (!this[i].Equals(collB[i]))
return false;
}
return true;
}
}
return false;
}
アブストラクトで多くのことを達成しようとしていますか、それとも正しい方法で行っていますか?
編集:これは.Net 2.0用に書かれており、LINQなどを利用するために3.5にアクセスすることはできません