Смысловое равенство объектов в C#
Метод Equals принимает object?
и возвращает bool. В переопределении
сначала проверяют тип, затем сравнивают поля.
Для того же правила нужен согласованный
хеш-код: если два объекта равны по смыслу,
числа из GetHashCode должны совпадать.
Иначе тип ведет себя некорректно в наборах
и словарях.
Запишем класс Box с полем Value:
class Box
{
public int Value;
public override bool Equals(object? obj)
{
if (obj is not Box other)
{
return false;
}
return Value == other.Value;
}
public override int GetHashCode()
{
return Value.GetHashCode();
}
}
Создадим две коробки с одинаковым значением и сравним их:
var left = new Box { Value = 7 };
var right = new Box { Value = 7 };
Console.WriteLine(left.Equals(right));
Console.WriteLine(left.GetHashCode() == right.GetHashCode());
Сделайте класс Label с полем Text.
Два объекта с текстом "ok" должны
считаться равными и давать одинаковый хеш-код.
Выведите ответ сравнения и совпадение хеш-кодов.
Создайте два Label с текстами "a"
и "b". Выведите, равны ли они
по вашему правилу.