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