2010-09-16 71 views
9

在MSDN中的转换器我读过这个约EnumConverter获取该类型

你不应该创建一个EnumConverter的实例。相反,调用TypeDescriptor类的GetConverter方法。有关更多信息,请参阅TypeConverter基类中的示例。

有没有人知道为什么,对我自己实现的转换器是否属实?

例如,我有类GradientColor和转换器GradientColorConverter。我应该写

new GradientColorConverter().ConvertFrom(colorString) 

TypeDescriptor.GetConverter(typeof(GradientColor)).ConvertFrom(colorString); 

其实它工作在两种方式,但哪个更好?

回答

15

我认为后者TypeDescriptor.GetConverter(typeof(GradientColor)),因为它允许其他转换器添加或扩展类型转换器系统,当代码运行在不同的上下文(如自定义控制运行在另一个应用程序与自己的自定义typeconverters)。

+0

据我所知,类属性中指定的转换器类型。在其他应用程序中它有什么不同? – 2010-09-16 04:32:07

+0

TypeDescriptor从类型系统中读取(属性或默认类型转换),然后将其扩展以允许在运行时自定义。我从来没有做过,但它在文档中。看看TypeDescriptionProvider。这将使您在更高版本的应用程序中重用您的类更加容易。 – yzorg 2010-09-18 01:46:09

2

后者。如果你改变类型转换器类,你的代码仍然可以工作。解耦是好的。

+0

你是对的,但在这种情况下,反射将用于从属性获取转换器类型。不知道它是否好,如果我可以创建转换器实例作为静态类型。 – 2010-09-16 04:35:12