visual studio c# .net

studio - override equals c#



¿Cuándo anular GetHashCode()? (4)

"El método GetHashCode puede ser reemplazado por un tipo derivado. Los tipos de valor deben reemplazar este método para proporcionar una función hash que sea apropiada para ese tipo y proporcionar una distribución útil en una tabla hash. Para obtener los mejores resultados, el código hash debe basarse en el valor de un campo o propiedad de instancia en lugar de un campo o propiedad estática.

Los objetos utilizados como clave en un objeto Hashtable también deben anular el método GetHashCode porque esos objetos deben generar su propio código hash. Si un objeto utilizado como clave no proporciona una implementación útil de GetHashCode, puede especificar un proveedor de código hash cuando se construye el objeto Hashtable. Antes de .NET Framework versión 2.0, el proveedor de código hash se basaba en la interfaz System.Collections .. ::. IHashCodeProvider. A partir de la versión 2.0, el proveedor de código hash se basa en la interfaz System.Collections .. ::. IEqualityComparer ".

http://msdn.microsoft.com/en-us/library/system.object.gethashcode.aspx

¿Cuándo debemos anular el método GetHashCode () proporcionado por la clase '' Object '' en el espacio de nombres '' System ''?


Si reemplaza a Equals también debe anular GetHashCode .


Si su tipo debe seguir la semántica de valores (comparando contenidos) en lugar de la semántica de referencia (comparando la identidad del objeto), debe escribir su propia anulación de la instancia object.Equals ().


Cuando anulas Equals , básicamente. Cuando quiera proporcionar una idea de igualdad diferente a la igualdad de referencia simple.

La cadena es un buen ejemplo de esto: dos cadenas son iguales (bajo una simple llamada de Igualdad) si representan la misma secuencia de caracteres. El código hash refleja esto, de modo que si dos cadenas son iguales, tendrán el mismo código hash. (Lo contrario no es necesariamente cierto: dos cadenas desiguales pueden tener el mismo código hash, pero es poco probable).

(Las cadenas son complicadas de otras maneras, fíjense, hay muchas ideas diferentes de igualdad basadas en la cultura y el estilo, pero String.Equals solo mira los puntos de código UTF-16 que forman la cadena y los compara de la forma más simple moda concebible.)