J'utilise donc CollectionBase comme une classe héritée pour les collections personnalisées. J'utilise CollectionBase à travers une classe abstraite afin que je ne répète pas les connaissances (en suivant le principe DRY). La classe abstraite est définie comme une classe générique également. Voici comment je suis ma classe de mise en œuvre:Abstract Class - Suis-je en train de trop penser ou de faire les choses correctement?
public abstract class GenericCollectionBase<T,C> : CollectionBase
{
//Indexders, virtual methods for Add, Contains, IndexOf, etc
}
J'utiliser ce donc je ne pas mettre en œuvre ces méthodes de base dans les classes 10+.
Ma question est ce que je prends trop loin quand je remplacer la méthode Equals comme ceci:
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;
}
Suis-je essayer de faire trop avec mon résumé, ou le faire dans le bon sens?
EDIT: Ceci est écrit pour .NET 2.0 et n'ont pas accès à 3,5 à utiliser des choses comme LINQ
Je reçois cette erreur lors de l'utilisation "if (! EqualityComparer Equals (ce [i], collB [i]))" Une référence d'objet est nécessaire pour le champ non statique, la méthode ou la propriété « du système. Collections.Generic.EqualityComparer .Equals (T, T) ' –
L'égalité (T, T) n'est pas une méthode statique; EqualityComparer .Default.Equals (this [i], collB [i]) est ce que vous voulez. –
Génial, merci! –