Функция Gethashcode () - PullRequest
       19

Функция Gethashcode ()

1 голос
/ 25 августа 2010

Почему C1 и C2 не имеют одинаковый хэш-код? код не доходит до «одного и того же» .... (i = 0 в обоих классах)

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

    }
}

Ответы [ 2 ]

3 голосов
/ 25 августа 2010

Реализация по умолчанию GetHashCode() основана на ссылке, а не на полях объекта.

Если вы хотите, чтобы они были одинаковыми, вам нужно переопределить GetHashCode(), поэтому он основанна вашем поле (и затем вы должны помнить, чтобы переопределить Equals() также).

1 голос
/ 25 августа 2010

Поскольку вы создаете разных экземпляров одного и того же класса.Каждый экземпляр класса имеет свой собственный хеш-код, и хеш-код используется для идентификации объекта в памяти вашей программы, даже если они оба используют одни и те же значения полей.

Однако, если вы это сделаете, он будетнапишите «Same», потому что вы просто создаете две переменные, которые указывают на один и тот же объект (т.е. вы передаете ссылку c1 на объект c2):

    myclass c1 = new myclass();
    myclass c2 = c1;

    if (c1.GetHashCode() == c2.GetHashCode())
        Console.Write("Same");

OfКонечно, я не думаю, что это то, чего вы хотите достичь.

...