Вопрос в том, каковы варианты использования оператора неявного преобразования типов, которые не сделают мой код более трудным для понимания?
Когда типы не связаны (с программистами). Есть (редкие) сценарии, когда у вас есть два не связанных типа (с точки зрения кода), которые на самом деле связаны (с точки зрения предметной области или разумных программистов).
Например, некоторый код для сопоставления строк. Обычный сценарий - сопоставление строкового литерала. Вместо вызова IsMatch(input, new Literal("some string"))
неявное преобразование позволяет вам избавиться от этой церемонии - шума в коде - и сосредоточиться на строковом литерале.
Большинство программистов увидят IsMatch(input, "some string")
и быстро поймут, что происходит. Это делает ваш код более понятным на сайте вызова. Короче говоря, это немного облегчает понимание того, что происходит, за небольшую цену того, как это происходит.
Теперь вы можете утверждать, что простая перегрузка функции для выполнения того же действия была бы лучше. И это. Но если такого рода вещи встречаются повсеместно, то одно преобразование будет чище (меньше кода, повышенная согласованность), чем выполнение множества перегрузок функций.
И вы можете возразить, что лучше потребовать от программистов явного создания промежуточного типа, чтобы они видели «что на самом деле происходит». Это не так просто. Лично я думаю, что пример буквального совпадения строк очень ясно говорит о «что происходит на самом деле» - программисту не нужно знать механизм того, как все происходит. Знаете ли вы, как весь ваш код выполняется различными процессорами, на которых он работает? Всегда есть линия абстракции, где программисты перестают заботиться о том, как что-то работает. Если вы считаете, что шаги неявного преобразования важны, не используйте неявное преобразование. Если вы думаете, что это просто церемония, чтобы сохранить компьютер счастливым, и программисту было бы лучше не видеть этот шум повсюду,