Если я перегрузку operator ==
для класса, я должен выполнить некоторые проверки, прежде чем сравнивать поля:оператор равенства перегрузки в структура и классы
если оба аргумента равны нулю, или оба аргумента являются одинаковыми экземпляр, затем возвращает истинное
Пример:
if (System.Object.ReferenceEquals(arg1, arg2)) return true;
если один пустой, но не оба, а затем возвращает ложь
Пример:
if (((object)arg1 == null) || ((object)arg2 == null)) return false;
В самом деле, если у меня есть структура и я хочу сделать перегрузку operator ==
, эти проверки не нужны, а они бесполезны, по следующим причинам: а структура является значение типа, поэтому оно не может быть нулевым, например DateTime date = null;
недействительно, потому что DateTime
(это struct) не является ссылочным типом, поэтому вы не можете сравнить два DateTime
, один из которых установлен в null
.
Я создал простой-структуру Point2D
с operator ==
, то я сравниваю экземпляр Point2D
с null
:
Point2D point = new Point2D(0,0);
Console.WriteLine((point == null));
Очевидно
operator ==
это не называется, но сравнение возвращаетFalse
. Какой метод называется?В заявке documentation указано, что перегрузка этого оператора в не неизменяемых типах не рекомендуется. Зачем?
Вы должны попытаться задать только один вопрос одновременно. Если у вас есть два вопроса, спросите их отдельно. – svick
@svick: Извините. Для следующих вопросов я избегу этого. – enzom83