Ссылочное и смысловое равенство в C#
У классов сравнение по умолчанию
и метод Equals без своей логики
отвечают на вопрос об идентичности ссылки:
равны только два имени одного и того же объекта.
Смысловое равенство нужно, когда два
разных экземпляра с одинаковыми полями
должны считаться равными. Запишем класс Tag
и сравним два объекта с одним кодом:
var left = new Tag { Code = 5 };
var right = new Tag { Code = 5 };
Console.WriteLine(left == right);
Console.WriteLine(ReferenceEquals(left, right));
class Tag
{
public int Code;
}
Первый вывод показывает False: данные совпали,
но ссылки разные. ReferenceEquals
проверяет именно совпадение ссылки.
Создайте два объекта Badge с кодом 7.
Выведите в двух строках, считает ли среда
их одним экземпляром и совпадают ли коды
при ручном сравнении полей.