在我看来,与 TypeConverter 相比,实现隐式运算符非常容易,因此我假设它们并不等效,因为框架中 TypeConverters 的盛行(请参阅扩展 FrameworkElement 的任何内容)。
但是为什么呢?创建字符串->对象和对象->字符串隐式运算符并利用序列化(XML 和 XAML)中的这些运算符不是更容易吗?
是亚格尼吗?单一责任?因为你不能在接口中指定运算符重载?
类型转换器比看起来复杂得多;类型转换器可以访问有关转换的“上下文”的一系列元数据 - 例如,所涉及的属性和对象。这用于为每个场景提供自定义选项(想想:链接的下拉菜单,即国家/县/城市/等)。您还可以在每个属性的基础上指定类型转换器,我在很多地方使用它来提供对各种字符串属性的不同处理。运算符会对所有字符串一视同仁。 隐式运算符只知道正在转换的
值,但具有更强的编译时支持。 或者另一种方式:
TypeConverter
是框架功能,有框架支持; 运算符(主要)是具有语言支持的语言功能
要添加更多 - 类型转换器(尽管有名称)不只是转换:
它们提供子属性元数据(想想:在
PropertyGrid
PropertyGrid
PropertyGrid
,尽管 ;-p
但乍一看,它看起来像 - 您可以在原始类之外提供转换器(与隐式运算符相反)并且也许您可以为同一事物定义多个 TypeConverter 类(如果您想为相同的值获得不同的视图) .
此外,隐式运算符似乎是为非常相似的事物保留的,并且隐式转换很直观。但我想无论如何这都是主观的,请使用你最好的判断。
我知道 TypeConverters 可以与 Visual Studio 设计器配合使用,这样,如果您为列表或数组等属性提供正确的 TypeConverter,则可以通过设计器设置它们。
隐式运算符也提供此服务吗?如果没有,我怀疑这可以回答您的问题:Visual Studio 使用 TypeConverters,因此具有这些项目的控件可以与设计器一起使用。