2010-11-04 5 views

Répondre

10

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.

3

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

+0

Voir aussi: http://stackoverflow.com/questions/371328/why-is-it-important-to-override-gethashcode-when-equals-method-is-overriden-in-c –

0

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.

0

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)

by Jon Skeet

Questions connexes