Maison >développement back-end >C++ >Devriez-vous remplacer GethashCode lors de la maîtrise de l'ampoule est égal à .NET?

Devriez-vous remplacer GethashCode lors de la maîtrise de l'ampoule est égal à .NET?

DDD
DDDoriginal
2025-02-02 15:26:10477parcourir

Should You Override GetHashCode When Overriding Equals in .NET?

.NET réécrit égaux devrions-nous réécrire GethashCode?

Lorsque vous définissez des types personnalisés dans .NET, si nécessaire, non seulement vous devez réécrire la méthode Equals, mais également réécrire la méthode GethashCode, ce qui est très important. Ceci est particulièrement important lorsque le type est utilisé comme clé dans une collection de dictionnaires et d'ensembles de hachage.

Pourquoi réécrit GethashCode?

GethashCode est responsable de la génération du code de hachage pour les objets. Sans comparateurs personnalisés, collectant ce code de hachage pour déterminer le programme approprié de trouver des objets. Si le code de hachage des deux objets est le même, il est supposé qu'ils sont situés dans le même seau, et ce n'est qu'à ce moment-là, les égaux seront appelés pour effectuer des vérifications égales plus détaillées.

La méthode préférée de Gethashcode

Compte tenu de la classe FOO fournie, la réécriture des égaux est comparée sur la base de l'attribut FOOID. Cette méthode est cohérente avec Equals Logic pour s'assurer que les objets avec le même FOOID ont le même code de hachage.

Les conséquences d'une réécriture incorrecte de Gethashcode

Ignorez la réécriture de GethashCode et utilisez l'implémentation par défaut, qui entraînera les effets indésirables suivants:

Miss Miss Object Egal Object: Si les deux objets sont réellement égaux mais ont des codes de hachage différents, ils peuvent ne jamais être considérés comme égaux car ils n'appellent pas égaux.

Trop de conflits:

L'implémentation incorrecte de Gethashcode conduira à des conflits excessifs, et beaucoup d'entre eux sont alloués avec le même code de hachage, ce qui conduit à une faible efficacité de performance.

  • Autres précautions
  • Règles GethashCode: GethashCode et égal doit adhérer à des règles spécifiques. Les objets égaux doivent renvoyer le même code de hachage et différents objets peuvent avoir le même code de hachage.
  • combinaison de code HACH:
Lorsque l'on considère la nature égale de plusieurs attributs, il est recommandé de combiner leur code de hachage pour réduire les conflits diagonaux.

Transport pratique: Envisageant de fournir la charge == et!

  • En réécrivant GethashCode en fonction des égaux, nous nous assurons que les objets avec la même identification ont le même code de hachage pour favoriser un stockage et une récupération efficaces et précis dans la collection.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn