Я работаю над проектом С#, на котором до сих пор я использовал неизменяемые объекты и фабрики, чтобы гарантировать, что объекты типа Foo всегда можно сравнить для равенства с ==.
Foo объекты не могут быть изменены после создания, а factory всегда возвращает один и тот же объект для заданного набора аргументов. Это отлично работает, и на всей базе кода мы предполагаем, что == всегда работает для проверки равенства.
Теперь мне нужно добавить некоторую функциональность, которая вводит кэш края, для которого это не всегда будет работать. Самое простое - перегрузить operator == для этого типа, так что ни один из других кодов в проекте не должен меняться. Но это поражает меня как запах кода: перегрузка operator ==, а не Equals кажется странной, и я привык к соглашению, что == проверяет ссылочное равенство, а Equals проверяет равенство объекта (или что-то вроде термина есть).
Является ли это законной проблемой, или я должен просто идти вперед и перегружать operator ==?