Введение в object, равенство и records в C#
У каждого класса и каждой структуры в .NET
есть общий предок - тип object.
Через него у любого экземпляра доступны
базовые операции сравнения и текстового
представления.
Поведение по умолчанию заточено под ссылочные типы. Сравнение обычно отвечает на вопрос, указывают ли две переменные на один и тот же объект в памяти. Вывод в консоль чаще показывает имя типа, а не содержимое полей. Хеш-код согласован с тем правилом равенства, которое действует для типа сейчас.
В прикладном коде часто нужно другое: два независимо созданных объекта с одинаковыми данными должны считаться равными, печататься читаемо и корректно жить в наборах и словарях.