C# operator ==
C# operator ==
как он пишется надеюсь все помнят - public static Boolean operator ==(TObject a, TObject b) { ... }
Но меня интересует не этот вариант а чутк другой:
public static Boolean operator ==(TFirst a, TSecond b) { ... }
Т.е. вариант, когда сравниваются разнотипные объекты.
Написать сам компаратор разнотипных объектов - проблемы не представляет.
Вопрос возникает позднее, кода в коде имеется
TFirst a = new TFirst();
TSecond b = new TSecond();
if(a == b) { ... } // ok
if(b == a) { ... } // error
Операция ==, в общем-то, коммутативная, от положения операндов зависеть не должна.
Но Шарп "не понимает" коммутативность и потому придется писать парную свапнутую
операцию.
Как решаете подобные вопросы?
Пишете в том же классе или переносите в первый в операторе==?
Почему?
Инкапсуляция в данном случае не нарушается.
Результирующий код выглядит нормально.
Работает все тоже на раз.
Но есть описанная проблема. С нею надо разобраться и забыть - просто писать 6-ть методов, вместо 4-х. Вопрос лишь где именно это делать...
Почему?
потому как ты привык что == делает то что видно сразу и нужно знать, что именно перекрыто, иначе можно не понять как енто работает. Да и побочные эффекты могут быть.
Я вот один раз в ToString что то намудрил, гонки получались и в отладчике неправильно показывало значение и в проге иногда.
Мне лично так бы больше подошло: bool Compare(this A a, B b), bool Compare(this B b, A a), хотя две не делал бы, потому как "сравнение" должно быть одно, придется третью функцию писать.
Ну а Я как раз не хочу писать a.Compare(b) в том месте, где мне удобно написать а==b.
Меня ведь итересует не больше-равны-меньше, а именно == или !=.
Проблемы написания и связанные с ними ошибки меня сейчас не интересуют.
Все, что меня беспокоит, это чтобы результирующий код был прост и понятен.
Но вопрос был не чем заменить, а в как и где доопределять комутативную пару.
а в как и где доопределять комутативную пару.
В может еще и ключ от квартиры где деньги лежат (С) ОБ
Одна функция сравнения и две обвертки
Что то перестала инфа о новых ответах приходить.
Одна функция сравнения и две обвертки
------
Так куда обертки то класть?
Можно все в один из классов, но вроде как инкапсуляция в минусе.
Можно - по разным, но тогда еще проблемнее.
А вынести в чистый эхтентион - низзя вроде...
перестала инфа о новых ответах приходить.
------
У меня ее никогда и не было - местный сервер на местную почту ничего не отправляет.
equals будет всё же получше, думаю
https://stackoverflow.com/questions/814878/c-sharp-differe...
https://blogs.msdn.microsoft.com/csharpfaq/2004/03/29/when...
https://coding.abel.nu/2014/09/net-and-equals/
хотя можно и так глянуть
https://www.codeproject.com/Articles/1111680/equalsequals-...