Quelle est la différence entre IComparable & IEquatable interfaces?
à la fois les interfaces semblent comparer des objets pour l'égalité, donc quelles sont les principales différences entre elles?
Vous devez vous connecter pour publier un commentaire.
IEquatable
teste si deux objets sont égaux.IComparable
impose un montant total de votre commande sur les objets comparés.Par exemple,
IEquatable
vous dirais que 5 n'est pas égal à 7.IComparable
vous dirais que 5 vient avant le 7.IEquatable<T>
pour l'égalité.IComparable<T>
pour la commande.En plus Greg D réponse:
Vous pourriez mettre en œuvre IComparable sans la mise en œuvre de IEquatable pour une classe où un partiel de la commande de sens, et où très certainement vous souhaite la consommation de tirer la conclusion que juste parce que CompareTo() renvoie zéro, ce ne pas implique que les objets sont égaux (à des fins autres que des fins de tri).
IComparable
correctement. Pouvez-vous venir avec un exemple significatif oùCompareTo(…) == 0
n' pas synonyme d'égalité? Je ne peux certainement pas. En fait, l'interface du contrat (comme par MSDN) il fautCompareTo(…) == 0
implique l'égalité. Pour dire les choses crûment, dans ce cas comme le vôtre, utilisez unComparator
objet, ne pas mettre en œuvreIComparable
.IComparable
est tout à fait inapproprié ici. Ce que vous avez est un très particulier de la commande qui s'applique uniquement dans une situation particulière. Pour de telles situations, la mise en œuvre d'un généralIComparable
est faux. C'est ce queIComparer
s sont là. Par exemple, les gens ne peuvent pas être commandés de manière significative. Mais ils peut être commandés en fonction de leur salaire, de leur taille de chaussure, le nombre de leurs taches de rousseur ou de leur poids. Par conséquent, nous voudrions mettre en œuvre des différentesIComparer
s pour tous ces cas.IComparer
interface.Comme indiqué sur le Page MSDN pour IEquatable:
Equals
vsCompareTo
IComparable <T>
définit un type spécifique de la méthode de comparaison qui peut être utilisé pour commander ou trier des objets.IEquatable <T>
définit une méthode généralisée qui peut être utilisé à mettre en œuvre pour la détermination de l'égalité.Disons que vous avez la classe Personne
Pour trier ces objets, vous pouvez utiliser
people.Sort();
.Mais ce ne sera levée d'une exception.
Cadre ne sais pas comment faire pour trier ces objets. Vous devez dire à la façon de trier la mise en œuvre de
IComparable
interface.Cela permettra de trier le tableau correctement avec
Sort()
méthode.À côté pour comparer deux objets, vous pouvez utiliser
Equals()
méthode.Ce sera le retour de
false
parce queEquals
méthode ne sais pas comment faire pour comparer deux objets. Par conséquent, vous devez mettre en œuvreIEquatable
interface et dites le cadre de la façon de faire la comparaison. L'extension de l'exemple précédent, il va ressembler à ceci.