Est-ce que toutes les classes C# devraient remplacer Equals et GetHashCode? Pour plus d'exactitudetoutes les classes C# devraient-elles implémenter Equals et GetHashCode?
Répondre
Toutes les classes à hériter de la System.Object
.
Si vous devez fournir un Equals ou un GetHashCode spécifique à une classe, vous devez remplacer les méthodes de vos classes. Sinon, il suffit de les laisser ..
http://msdn.microsoft.com/en-us/library/system.object.gethashcode(v=VS.71).aspx
Non, ils le font déjà.
Si vous devez les remplacer, cela dépend de la façon dont il sera utilisé. Dans la plupart des cas, ce n'est pas nécessaire.
Toutes les classes héritent déjà de ces méthodes de la classe de base, System.Object.
Vous pouvez choisir de remplacer les méthodes dans les classes dérivées si vous devez pouvoir comparer deux instances d'un objet au-delà de la simple égalité de référence, sinon ce n'est pas nécessaire. Souvenez-vous cependant que si vous choisissez de surcharger l'un d'entre eux, vous devrez également remplacer l'autre afin de garantir que les tables Hashtables et les clés de dictionnaire, entre autres choses, fonctionnent correctement avec votre classe dérivée. La méthode GetHashCode doit refléter la même logique que la méthode Equals. Voir ici pour plus d'explications et d'exemples:
http://msdn.microsoft.com/en-us/library/bsc2ak47.aspx
et
http://msdn.microsoft.com/en-us/library/system.object.gethashcode.aspx
Voir aussi: http://stackoverflow.com/questions/371328/why-is-it-important-to-override-gethashcode-when-equals-method-is-overriden-in-c –
Peut-être pas tous, mais toutes les classes qui seront mis en une sorte de sac (IList, ICollection, IDictionary , Hashset, etc.) et ont besoin d'une méthode simple pour les différencier (il suffit de penser à Sort()
, Contains()
, BinarySearch()
, etc.).
Si vous utilisez une classe de cette façon, vous devez absolument les implémenter correct.
Lorsque vous remplacez
Equals
, fondamentalement. Lorsque vous souhaitez fournir une idée différente de l'égalité que la référence simple égalité .chaîne est un bon exemple - deux chaînes sont égales (sous un simple, Égale appel) si elles représentent la même séquence de caractères. Le code hash reflète cela, de sorte que si deux chaînes sont égales, elles auront le même code de hachage . (L'inverse n'est pas nécessairement vrai - deux chaînes inégales peuvent avoir le même code de hachage, mais c'est improbable.)
(cordes sont difficiles dans d'autres façons, l'esprit vous - il y a beaucoup de différentes idées d'égalité sur la base boîtier de la culture et , mais
String.Equals
semble juste aux points de code UTF-16 qui font la chaîne, et les compare à la plus simple mode concevable)
- 1. NHibernate Equals et GetHashCode
- 2. Equals et GetHashCode
- 3. Equals, GetHashCode, EqualityComparers et égalité floue
- 4. C# GetHashCode/Equals override non appelé
- 5. Est-ce que C# a les mêmes problèmes que Java avec equals et gethashcode()?
- 6. Entity Framework 4 écraser Equals et GetHashCode d'une propriété de classe
- 7. Activer un équivalent '.equals' pour les classes PHP5
- 8. Quel est le moyen le plus propre/le meilleur pour implémenter Equals et GetHashCode sur les types de tiers auxquels vous n'avez pas accès?
- 9. C# Assert.AreNotEqual versus Equals
- 10. Une structure semblable à Equals() pour les classes .NET?
- 11. Comment implémenter les méthodes equals() et hashcode() dans BaseEntity of JPA?
- 12. Comment dois-je implémenter les méthodes equals et hashCode de HashMap pour représenter un état d'automate?
- 13. Hide Equals et ReferenceEquals
- 14. Inscrivez toutes les classes d'enfants déclarés d'une classe en C#
- 15. Recherche de toutes les classes contenant une méthode en C#
- 16. Comment utiliser Object.GetHashCode() sur un type qui remplace GetHashCode()
- 17. mise en œuvre GetHashCode
- 18. Obtenir toutes les classes d'un paquet
- 19. Comment remplacer GetHashCode dans une BaseClass générale
- 20. Étant donné un type C#, obtenir ses classes de base et implémenter les interfaces
- 21. Comment puis-je forcer toutes les classes dérivées à implémenter une méthode ou une propriété abstraite?
- 22. Comment trouver toutes les classes implémentant IDisposable?
- 23. Forcer les sous-classes d'une interface à implémenter ToString
- 24. Liste toutes les classes qui existent actuellement
- 25. Comment aligner toutes les classes de données?
- 26. GetHashCode() avec les clés de chaîne
- 27. Comment implémenter des classes bidirectionnelles?
- 28. C# - Sur les classes et la mémoire
- 29. les classes enfants C++ dactylographie et POO
- 30. Python - Itérer sur toutes les classes
double possible. http://stackoverflow.com/questions/732930/when-to-override-gethashcode – BrokenGlass