隐式运算符和类型转换器等效吗?

问题描述 投票:0回答:4

在我看来,与 TypeConverter 相比,实现隐式运算符非常容易,因此我假设它们并不等效,因为框架中 TypeConverters 的盛行(请参阅扩展 FrameworkElement 的任何内容)。

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

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

.net operator-overloading implicit typeconverter
4个回答
9
投票

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

,但具有更强的编译时支持。 或者另一种方式:

TypeConverter

是框架功能,有框架支持; 运算符(主要)是具有语言支持的语言功能


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

它们提供子属性元数据(想想:在
    PropertyGrid
  • 上扩展属性)
    他们建议某种类型的可用选项(想想:
  • PropertyGrid
  • 上的下拉选项)
    
    
    
  • 请注意,它们的用途不仅仅是
PropertyGrid

,尽管 ;-p

    


3
投票

但乍一看,它看起来像 - 您可以在原始类之外提供转换器(与隐式运算符相反)并且也许您可以为同一事物定义多个 TypeConverter 类(如果您想为相同的值获得不同的视图) .


2
投票

此外,隐式运算符似乎是为非常相似的事物保留的,并且隐式转换很直观。但我想无论如何这都是主观的,请使用你最好的判断。


2
投票

我知道 TypeConverters 可以与 Visual Studio 设计器配合使用,这样,如果您为列表或数组等属性提供正确的 TypeConverter,则可以通过设计器设置它们。

隐式运算符也提供此服务吗?如果没有,我怀疑这可以回答您的问题:Visual Studio 使用 TypeConverters,因此具有这些项目的控件可以与设计器一起使用。

© www.soinside.com 2019 - 2024. All rights reserved.