隐式运算符和TypeConverters是等价的吗?

时间:2008-12-18 21:25:51

标签: .net operator-overloading implicit typeconverter

在我看来,实现隐式运算符与TypeConverter非常容易,所以我假设它们不等同,因为框架中普遍存在TypeConverters(请参阅任何扩展FrameworkElement的内容)。

但为什么呢?创建string-> object和object->字符串隐式运算符并利用序列化中的那些(XML和XAML)不是更容易吗?

是YAGNI吗?单一责任?因为你不能在接口中指定运算符重载?

4 个答案:

答案 0 :(得分:7)

类型转换器比它们看起来要复杂得多;类型转换器可以访问有关转换的上下文的一系列元数据 - 例如,涉及的属性和对象。这用于为每个方案提供自定义选项(想想:链接下拉菜单,即国家/县/城市/等)。您还可以基于每个属性指定类型转换器,我在很多地方使用它来提供对各种字符串属性的不同处理。操作员会以相同的方式处理所有字符串。

隐式运算符只知道正在转换的,但具有更大的编译时支持。

或另一种方式: TypeConverter是一个框架功能,具有框架支持; 运算符(主要)是具有语言支持的语言功能

要添加更多 - 类型转换器(尽管名称)不要只转换:

  • 他们提供子属性元数据(想想:在PropertyGrid上扩展属性)
  • 他们建议某种类型的可用选项(想想:PropertyGrid上的下拉选项)

请注意,它们的使用范围不仅仅是PropertyGrid,而是{-p

答案 1 :(得分:2)

我不是这方面的专家。

但乍一看,它看起来像 - 你可以提供原始类之外的转换器(与隐式运算符相对)&也许你可以为同一个东西定义多个TypeConverter类(如果你想为同一个值获得不同的视图)。

答案 2 :(得分:1)

隐含的运算符很好但也可能令人困惑。我认为当你需要从一种类型转换为另一种类型时,最好是明确的,因为对于发生的事情毫无疑问。

同样,隐式运算符似乎保留用于非常相似的事物,隐式转换是直观的。但我想这无论如何都是主观的,用你最好的判断。

答案 3 :(得分:1)

好奇:TypeConverters可以与visual studio设计器一起使用,这样如果你为Lists或Arrays这样的属性提供了正确的TypeConverter,你可以通过设计器设置它们。隐式运营商是否也提供此服务?如果没有,我怀疑这回答了你的问题:它们在框架中使用,以便使用这些项目的控件可以与设计师合作。