在我看来,实现隐式运算符与TypeConverter非常容易,所以我假设它们不等同,因为框架中普遍存在TypeConverters(请参阅任何扩展FrameworkElement的内容)。
但为什么呢?创建string-> object和object->字符串隐式运算符并利用序列化中的那些(XML和XAML)不是更容易吗?
是YAGNI吗?单一责任?因为你不能在接口中指定运算符重载?
答案 0 :(得分:7)
类型转换器比它们看起来要复杂得多;类型转换器可以访问有关转换的上下文的一系列元数据 - 例如,涉及的属性和对象。这用于为每个方案提供自定义选项(想想:链接下拉菜单,即国家/县/城市/等)。您还可以基于每个属性指定类型转换器,我在很多地方使用它来提供对各种字符串属性的不同处理。操作员会以相同的方式处理所有字符串。
隐式运算符只知道正在转换的值,但具有更大的编译时支持。
或另一种方式:
TypeConverter
是一个框架功能,具有框架支持;
运算符(主要)是具有语言支持的语言功能
要添加更多 - 类型转换器(尽管名称)不要只转换:
PropertyGrid
上扩展属性)PropertyGrid
上的下拉选项)请注意,它们的使用范围不仅仅是PropertyGrid
,而是{-p
答案 1 :(得分:2)
我不是这方面的专家。
但乍一看,它看起来像 - 你可以提供原始类之外的转换器(与隐式运算符相对)&也许你可以为同一个东西定义多个TypeConverter类(如果你想为同一个值获得不同的视图)。
答案 2 :(得分:1)
隐含的运算符很好但也可能令人困惑。我认为当你需要从一种类型转换为另一种类型时,最好是明确的,因为对于发生的事情毫无疑问。
同样,隐式运算符似乎保留用于非常相似的事物,隐式转换是直观的。但我想这无论如何都是主观的,用你最好的判断。
答案 3 :(得分:1)
好奇:TypeConverters可以与visual studio设计器一起使用,这样如果你为Lists或Arrays这样的属性提供了正确的TypeConverter,你可以通过设计器设置它们。隐式运营商是否也提供此服务?如果没有,我怀疑这回答了你的问题:它们在框架中使用,以便使用这些项目的控件可以与设计师合作。