Сравнение объектов операторами в C#
Запись left == right для класса
по умолчанию сравнивает ссылки. После настройки
смыслового равенства имеет смысл добиться,
чтобы знаки == и != давали
тот же ответ, что и сравнение по полям.
Операторы объявляют внутри класса как
статические методы. У Box сравнение
и хеш-код уже согласованы; добавим операторы:
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();
}
public static bool operator ==(Box? left, Box? right)
{
if (ReferenceEquals(left, right))
{
return true;
}
if (left is null || right is null)
{
return false;
}
return left.Equals(right);
}
public static bool operator !=(Box? left, Box? right)
{
return !(left == right);
}
}
Создадим две коробки с одинаковым значением и сравним их знаком равенства:
var left = new Box { Value = 7 };
var right = new Box { Value = 7 };
Console.WriteLine(left == right);
Для Label с уже настроенным смысловым
равенством добейтесь, чтобы сравнение знаком
равенства для двух меток с текстом "ok"
давало положительный ответ. Выведите результат.
Создайте два Label с разным текстом.
Выведите, дает ли сравнение на неравенство
ожидаемый ответ.