función GetHashCode ()
-
01-10-2019 - |
Pregunta
¿Por qué no se C1 y C2 tienen el mismo código hash? el código no llega a "Same" .... (i = 0 en ambas clases)
class myclass
{
public static int i;
static void Main()
{
myclass c1 = new myclass();
myclass c2 = new myclass();
if (c1.GetHashCode() == c2.GetHashCode())
Console.Write("Same");
}
}
Solución
La implementación predeterminada de GetHashCode()
se basa en la referencia, no los campos del objeto.
Si quiere que sean la misma, se debe redefinir GetHashCode()
, por lo que se basa en su campo (y entonces usted debe recordar para anular Equals()
también).
Otros consejos
Debido a que está creando diferentes casos de la misma clase. Cada instancia de una clase tiene su propio código hash, y el código hash se utiliza para identificar un objeto en la memoria del programa, aunque ambos comparten los mismos valores de campo.
Si lo hizo, sin embargo, que va a escribir "Same", ya que está sólo la creación de dos variables que apuntan al mismo objeto (es decir, estás pasando la referencia de c1
al objeto de c2
):
myclass c1 = new myclass();
myclass c2 = c1;
if (c1.GetHashCode() == c2.GetHashCode())
Console.Write("Same");
Por supuesto, yo no creo que esto es lo que busca alcanzar.