Cuando deberíamos reemplazar el método GetHashCode () proporcionado por 'Objeto' clase en 'Sistema' espacio de nombres?Cuándo anular GetHashCode()?
Respuesta
Cuando anula Equals
, básicamente. Cuando desea proporcionar una idea diferente de la igualdad que la igualdad de referencia simple.
La cadena es un buen ejemplo de esto: dos cadenas son iguales (en una llamada igual simple) 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. (A la inversa no es necesariamente cierto -. Dos cadenas desiguales puede tener el mismo código hash, pero es poco probable)
(cadenas son difíciles de otras maneras, eso sí - hay un montón de diferentes ideas de igualdad basa en la cultura y la carcasa, pero String.Equals
sólo se ve en las UTF-16 puntos de código que componen la cadena, y los compara en la forma más simple concebible.)
Si reemplaza Equals
debe invalidar GetHashCode
también.
"El método GetHashCode puede ser anulado por un tipo derivado. Los tipos de valores deben anular este método para proporcionar una función hash que sea apropiada para ese tipo y para proporcionar una distribución útil en una tabla hash. el código 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 el System.Collections .. ::. IHashC interfaz odeProvider. Desde la versión 2.0, el proveedor de código hash se basa en los System.Collections interfaz .. ::. IEqualityComparer."
http://msdn.microsoft.com/en-us/library/system.object.gethashcode.aspx
Si su tipo debe seguir la semántica de valor (contenido comparaban) en lugar de la semántica de referencia (comparando la identidad del objeto), usted debe escribir su propia anulación del objeto instancia. Iguales().
- 1. NHibernate: Razones para anular Iguales y GetHashCode
- 2. ¿Cuándo esperar y cuándo anular?
- 3. ¿Cuándo hacemos GetHashCode() para un diccionario?
- 4. Cuándo anular OnError?
- 5. Uso GetHashCode para probar la igualdad de los iguales anular
- 6. ¿Qué puede salir mal si no se puede anular GetHashCode() al anular Equals()?
- 7. Anulación de GetHashCode
- 8. GetHashCode() con^
- 9. GetHashCode Equality
- 10. Ejecución GetHashCode
- 11. GetHashCode (llave) y int.MaxValue
- 12. GetHashCode() desde booleanos única
- 13. GetHashCode Método de extensión
- 14. ¿Por qué importar GetHashCode()?
- 15. GetHashCode en campos nulos?
- 16. Implementando GetHashCode correctamente
- 17. Android: cuándo anular el registro del oyente - onStop() o onDestroy()
- 18. ¿Cuándo NO llamar al método super() al anular?
- 19. Igual a GetHashCode al comparar objetos
- 20. C# Reemplazando el método GetHashCode
- 21. GetHashCode() con claves de cadena
- 22. .Net GetHashCode Bit operación de cambio
- 23. Forma correcta de reemplazar Igual() y GetHashCode()
- 24. aplicar GetHashCode() para objetos que contienen colecciones
- 25. Si nunca utilizo HashSet, ¿debería implementar GetHashCode?
- 26. ¿Cómo se implementa GetHashCode() para Int32?
- 27. Creando el método GetHashCode en C#
- 28. ¿Cómo anular correctamente la igualdad?
- 29. Anular log4j.properties
- 30. Anular atributos
Mi colega y yo estábamos discutiendo esto hoy. Tiene mucho más sentido ahora. Gracias Jon. – RSolberg
gracias a John por tan fácil entiendo la descripción. – tush1r
Digamos que tengo un punto que tiene dos enteros para describir las coordenadas. ¿Cómo devolvería un _unique_ hashcod? ¿Cuál es solo un entero grande? Cuantos más datos tenga mi estructura, mayor será la posibilidad de obtener los mismos valores hash para datos completamente diferentes. ¿Sería inútil implementar esto si tuviera 7 flotantes como en una de mis estructuras (que tiene operaciones de igualdad)? –