Являются ли неявные операторы и TypeConverters эквивалентными?

Мне кажется, что очень легко реализовать неявный оператор по сравнению с TypeConverter, поэтому я предполагаю, что они не эквивалентны из-за распространенности TypeConverters в структуре (см. все, что расширяет FrameworkElement).

Но почему? Разве было бы намного проще создавать строковые невязкие операторы string- > object и object- > и использовать преимущества сериализации (как XML, так и XAML)?

ЯГНИ? Единая ответственность? Поскольку вы не можете указать перегрузки операторов в интерфейсах?

Ответ 1

Преобразователи типов намного сложнее, чем кажется; тип-конвертер имеет доступ к ряду метаданных о контексте преобразования - например, к объекту и объекту, который задействован. Это используется для предоставления настраиваемых параметров для каждого сценария (подумайте: связанные выпадающие списки, то есть страна/графство/город/и т.д.). Вы также можете указать тип-конвертер для каждого свойства, который я использую во многих местах, чтобы обеспечить различную обработку различных свойств строки. Оператор будет обрабатывать все строки одинаково.

Неявный оператор знает только о значении, которое преобразуется, но имеет гораздо большую поддержку времени компиляции.

Или иначе: TypeConverter - это структурная функция с поддержкой фреймов; операторы - это (прежде всего) языковая функция с поддержкой языка

Чтобы добавить больше - преобразователи типов (несмотря на название) не просто конвертируют:

  • они предоставляют метаданные суб-свойств (думаю: расширяя свойства на PropertyGrid)
  • они предлагают доступные варианты для типа (думаю: выпадающие варианты на PropertyGrid)

Обратите внимание, что они используются в большем количестве мест, чем просто PropertyGrid, хотя; -p

Ответ 2

Я не эксперт в этом.

Но на первый взгляд это выглядит так: вы можете предоставить конвертеры за пределами исходного класса (в отличие от неявного оператора), и, возможно, вы можете определить несколько классов TypeConverter для одной и той же вещи (если вы хотите получить разные представления для одного и того же значение).

Ответ 3

Неявные операторы хороши, но также они могут ввести в заблуждение. Я думаю, что когда вам нужно конвертировать из одного типа в другой, лучше всего быть явным, поскольку нет никаких вопросов относительно того, что происходит.

Также неявные операторы, похоже, были зарезервированы для вещей, которые очень похожи друг на друга, и неявное преобразование является интуитивным. Но я думаю, что все это субъективно, используйте свое лучшее суждение.

Ответ 4

Просто любопытно: TypeConverters могут работать с дизайнером визуальной студии, так что если вы предоставите правильный TypeConverter для таких свойств, как списки или массивы, вы можете установить их через конструктор. Предоставляют ли неявные операторы эту услугу? Если нет, я подозреваю, что ответ на ваш вопрос: они используются в рамках, так что элементы управления, использующие эти элементы, могут работать с дизайнером.