Я сталкиваюсь с этим предложением в статье 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();
}
}