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");

    }
}
¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top