Что значит «Вы не должны переопределять Equals для изменяемого ссылочного типа»? - PullRequest
0 голосов
/ 12 февраля 2019

Я сталкиваюсь с этим предложением в статье MSDN "https://docs.microsoft.com/en-us/dotnet/api/system.object.equals?redirectedfrom=MSDN&view=netframework-4.7.2#System_Object_Equals_System_Object_"

Рекомендации для ссылочных типов Вы не должны переопределять Equals для изменяемого ссылочного типа. Это потому, что переопределение Equals требует, чтобы вытакже переопределяет метод GetHashCode, как обсуждалось в предыдущем разделе. Это означает, что хеш-код экземпляра изменяемого ссылочного типа может измениться в течение срока его службы, что может привести к потере объекта в хеш-таблице.

Я действительно запутался. Например, ниже класс Person является изменяемым объектом.

, и в той же статье приведен этот пример, и он переопределяет метод Equal. Это имеет смысл для меня, но почему вВ той же статье сказано, что « Вы не должны переопределять Equals для изменяемого ссылочного типа. »

public class Person
{
   private string idNumber;
   private string personName;

   public Person(string name, string id)
   {
      this.personName = name;
      this.idNumber = id;
   }

   public override bool Equals(Object obj)
   {
      Person personObj = obj as Person; 
      if (personObj == null)
         return false;
      else
         return idNumber.Equals(personObj.idNumber);
   }

   public override int GetHashCode()
   {
      return this.idNumber.GetHashCode(); 
   }
}
...