Override GetHashCode
et Equals
pour la comparaison cohérente des objets
Lorsque vous redéfinissez la façon dont les objets d'une classe sont comparés pour l'égalité en remplaçant la méthode Equals
, il est essentiel de remplacer également la méthode GetHashCode
. Ceci est particulièrement important lorsque vos objets sont utilisés comme clés dans des collections basées sur le hachage comme les dictionnaires ou les ensembles de hachage.
Considérons une classe Foo
:
public override bool Equals(object obj) { // ... comparison logic based on FooId ... }
Si vous personnalisez Equals
pour comparer les objets Foo
basés sur une propriété FooId
, la valeur par défaut GetHashCode
(héritée de Object
) générera toujours des codes de hachage en fonction de l'adresse mémoire de l'objet. Cette incohérence conduit à un comportement imprévisible lors de l'utilisation d'objets Foo
comme clés dans les tables de hachage.
Pourquoi le hachage cohérent compte
Le remplacement GetHashCode
est crucial pour:
Equals
pour vérifier. Un GetHashCode
bien impliqué minimise les collisions, garantissant que Equals
est utilisé pour déterminer la véritable égalité. Implémentation de GetHashCode
efficacement
L'implémentation GetHashCode
doit s'aligner sur la logique de la méthode Equals
:
Equals
pour une comparaison définitive. Pour la classe Foo
, une remplacement GetHashCode
approprié est:
public override int GetHashCode() { return this.FooId.GetHashCode(); }
Cela génère des codes de hachage basés sur FooId
, reflétant la vérification de l'égalité Equals
.
en utilisant des comparateurs personnalisés pour une clarté améliorée
Lorsque vous remplacez Equals
et GetHashCode
, envisagez d'ajouter des opérateurs d'égalité personnalisés (==
et !=
) pour améliorer la lisibilité et la maintenabilité du code.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!