Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Замечание
Это содержимое перепечатывается разрешением 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.