2010-08-25 5 views
1

Почему нет C1 и c2 имеют одинаковый хэш-код? код не получает «Тот же» .... (I = 0 в обоих классах)Функция Gethashcode()

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

    } 
} 
+3

Пожалуйста, отметьте свой вопрос на соответствующем языке программирования. –

+0

Я предполагаю, что любой язык, на котором это делается, делает то же самое, что и Java, когда вы не переопределяете hashCode объекта() и просто возвращаете адрес указателя. –

ответ

3

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

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

1

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

Если вы это сделали, то он будет писать «То же», потому что вы просто создаете две переменные, указывающие на один и тот же объект (то есть вы передаете ссылку c1 на объект до c2):

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

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

Конечно, я не думаю, что это то, что вы ищете.

Смежные вопросы