По-прежнему необходимо перегрузить == для обеспечения его нормальной работы?

2

причина, по которой я задал этот вопрос, состояла в том, что после прочтения совета msdn о перегрузке этого оператора в конце страницы он упомянул:

Общей ошибкой в ​​перегрузках оператора == является использование (a == b), (a == null) или (b == null) для проверки ссылочного равенства. Это приводит к вызову перегруженного оператора ==, вызывающему бесконечный цикл. Используйте ReferenceEquals или задайте тип Object, чтобы избежать цикла.

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

  • 3
    У меня никогда не было веской причины перегрузить оператор ==.
  • 0
    да и обычно, но сегодня мне не хватает воображения (и, возможно, плохой практики программирования) :)
Показать ещё 1 комментарий
Теги:
.net-3.5

1 ответ

10
Лучший ответ

Нет! Не связывайтесь с эталонным равенством, если не знаете, что делаете. Внедрите метод IComparable Equals, если вам нужно.

Изменить: для лучшего поиска изображения Эффективный С#, Item # 9.

Изменить: вы можете добраться отсюда:

http://my.safaribooksonline.com/0321245660/ch01lev1sec10

  • 0
    Я уже реализовал метод IComparable. Мне просто нужно пояснение о том, нужен ли мне перегруз для стандартного сценария, а также для конкретного сценария, но ни у кого не хватает смелости сломать c #, я буду :)
  • 1
    Ссылочное равенство вам уже дано. Поскольку ссылки похожи на указатели, платформа .Net может просто сравнить их. Вы введете риск и замедление без дополнительной выгоды. Не делай этого. Теперь равенство объектов не может быть сделано автоматически и без вашей помощи. Также посмотрите на мягкие ссылки, но я сомневаюсь, что они вам нужны.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню