Как работает оператор ==
на C#? Если он использовал для сравнения объектов класса A, будет ли он соответствовать всем свойствам A, или он будет искать указатели в том же месте памяти (или, может быть, что-то еще)?Должен ли я перегружать == Оператор?
Давайте создадим гипотетический пример. Я пишу приложение, которое использует API Twitter, и имеет класс Tweet, который обладает всеми свойствами одного твита: текст, отправитель, дата & время, источник и т. Д. Если я хочу сравнить объекты класс Tweet эквивалентности, я могу просто использовать:
Tweet a, b;
if (a == b)
{
//do something...
}
Будет ли это проверка эквивалентности всех свойств от Tweet класса между и б?
Если нет, будет правильным подходом, чтобы перегрузить оператор ==
, чтобы явно проверить эквивалентность всех полей?
UPDATE: Из первых двух ответов, я прав в предположении:
- Если
==
оператор или Равно метод не перегружен для класса, оператор==
для объекта класс используется. - Оператор
==
для объекта класс проверяет равенство в памяти. - Я должен перегрузить оператора
==
или Equals метод для выполнения этой задачи. - В перегрузке мне нужно проверить эквивалентность свойств вручную, поэтому нет способа сделать это полуавтоматически, скажем, в цикле, правильно?
UPDATE # 2: Юрий сделал замечание, что можно делать проверку эквивалентности в свойствах в операторе ==
с отражения. Как это может быть сделано? Не могли бы вы дать мне пример кода? Благодаря!
Перед тем, как перегрузить оператор, считаю это: Моим обычным эмпирическим правило, когда речь идет о перегрузке операторов задает этот вопрос себе: «Есть ли общая смысл? Кто-нибудь другой разработчик сразу узнает, что делает оператор, даже не глядя на реализацию (код)? " Если ответ не «100% да», не делайте этого. Если это так, то, безусловно, пойти на это. –