Поделиться через


Операторы равенства

Примечание.

Это содержимое перепечатывается разрешением Pearson Education, Inc. из руководства по проектированию платформы: соглашения, идиомы и шаблоны для повторно используемых библиотек .NET, 2-го выпуска. Этот выпуск был опубликован в 2008 году, и книга с тех пор была полностью пересмотрена в третьем выпуске. Некоторые сведения на этой странице могут быть устаревшими.

В этом разделе рассматривается перегрузка операторов равенства. operator== и operator!= в этом разделе относятся к операторам равенства.

❌ НЕ перегружайте только один оператор равенства.

✔️ УБЕДИТЕСЬ, что Object.Equals и операторы равенства имеют одинаковую семантику и аналогичные характеристики производительности.

Часто это означает, что при перегрузке операторов равенства необходимо переопределить Object.Equals.

❌ НЕ создавайте исключения из операторов равенства.

Например, чтобы не создавать исключение NullReferenceException, верните значение false, если один из аргументов имеет значение NULL.

Операторы равенства для типов значений

✔️ ПЕРЕГРУЗИТЕ операторы равенства для типов значений, если равенство имеет смысл.

В большинстве языков программирования стандартная реализация operator== для типов значений отсутствует.

Операторы равенства для ссылочных типов

❌ ИЗБЕГАЙТЕ перегрузки операторов равенства для изменяемых ссылочных типов.

У многих языков есть встроенные операторы для ссылочных типов. Встроенные операторы обычно реализуют равенство ссылок. Многие разработчики удивляются, если поведение по умолчанию изменяется и применяются равные значения.

Эта проблема устранена для неизменяемых ссылочных типов, так как из-за неизменности значительно труднее обнаружить различия между равенством ссылок и равенством значений.

❌ ИЗБЕГАЙТЕ перегрузки операторов равенства для ссылочных типов, если реализация будет значительно медленнее, чем при равенстве ссылок.

Фрагменты: © Корпорация Майкрософт (Microsoft Corporation), 2005, 2009. Все права защищены.

Перепечатано с разрешения Pearson Education, Inc. из книги Инфраструктура программных проектов. Соглашения, идиомы и шаблоны для многократно используемых библиотек .NET (2-е издание), авторы: Кржиштоф Цвалина (Krzysztof Cwalina) и Брэд Абрамс (Brad Abrams). Книга опубликована 22 октября 2008 г. издательством Addison-Wesley Professional в рамках серии, посвященной разработке для Microsoft Windows.

См. также