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


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

Замечание

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

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

❌ НЕ перегружайте один из операторов равенства, оставляя другой непрегруженным.

✔️ Убедитесь, что Object.Equals и операторы равенства имеют точно ту же семантику и аналогичные характеристики производительности.

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

❌ Избегайте выброса исключений из операторов равенства.

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

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

✔️ Перегружайте операторы равенства для типов данных, если равенство имеет смысл.

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

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

❌ Избегайте перегрузки операторов равенства для изменяемых ссылочных типов.

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

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

❌ Избегайте перегрузки операторов равенства на ссылочных типах, если реализация будет значительно медленнее, чем равенство ссылок.

© Часть 2005, 2009 Корпорация Майкрософт. Все права защищены.

Перепечатан с разрешения Pearson Education, Inc. из Руководство по проектированию: Соглашения, идиомы и шаблоны для повторного использования библиотек .NET, 2-е издание Кшиштоф Чвалина и Брэд Абрамс, опубликованное 22 октября 2008 года Addison-Wesley Профессиональный в рамках серии разработки Microsoft Windows.

См. также