La documentación de MSDN en Object.GetHashCode() describe 3 reglas contradictorias sobre cómo debería funcionar el método.¿Object.GetHashCode() es exclusivo de una referencia o un valor?
- Si dos objetos del mismo tipo representan el mismo valor, la función hash debe devolver el mismo valor constante para cualquier objeto.
- Para obtener el mejor rendimiento, una función hash debe generar una distribución aleatoria para todas las entradas.
- La función hash debe devolver exactamente el mismo valor independientemente de los cambios que se realicen en el objeto.
Reglas 1 & 3 son contradictorias para mí.
¿El Object.GetHashCode() devolver un número único basado en el valor de un objeto, o la referencia al objeto. Si anulo el método, puedo elegir qué usar, pero me gustaría saber qué se usa internamente si alguien sabe.
Dado que todos los objetos son hashable en C# (GetHashCode() forma parte del tipo de objeto muy básico), que sugiere que hacer todos los objetos inmutables - no es muy práctico, no es así? – thewhiteambit
@thewhiteambit No.Estoy sugiriendo que no todos los objetos son buenos candidatos para las teclas de tabla hash. Solo porque * pueden * ser hasheados no significa que * deberían * ser *. Y el hecho de que 'GetHashCode' es un método de la clase base' Object' es simplemente una mala decisión de diseño en el lenguaje C#. Además, mi respuesta no es que deba hacer que cada tipo de clave de la tabla hash sea inmutable, sino que hacerlo ayuda tremendamente. –
Tienes razón, solo estaba señalando la frase "Para darme cuenta de esto, a menudo es más simple hacer inmanejables los objetos con capacidad de manipulación", y dado que todos los objetos son lavables (por mala elección de diseño) este intento haría todos los objetos con capacidad de carga (igual a todos objetos) inmutables. Pero supongo que no lo dijiste de esa manera. Probablemente solo quiso hacer que todos los objetos que quiera almacenar en Hash-Collections sean inmutables. – thewhiteambit