C#通用类型转换器
引子
在最近做的一个项目中,因为要在设计时和运行时都需要通过PropertyGrid对一些自定义类型的属性进行编辑,比如弹出窗体式编辑、下拉框式的编辑还有属性展开编辑等各种方式,查看了VS自己的一些控件的属性编辑,知道这就是我想要的。
还有,就是自定义类型和字符串之间的转换(类似于int.Parse和int.TryParse这些方法),也是我经常要用到和实现的。
技术准备
针对第一个问题,我们都知道,在设计时对属性编辑,VS会自动调用这些类型的TypeConverterAttribute和EditorAttribute等这些类型定义时候设置的类型转换器和类型编辑器。
针对第二个问题,就相对简单了,就是实现一个自定义类型的TypeConverter。
由于现在我需要编辑的类型都是自定义类型,并且还有一定的嵌套关系,所有要想实现相应的效果,就必须得实现我所有自定义类型的“类型转换器”和“类型编辑器”。“所有的”自定义类型,想起这个就知道工作量,海了。在起初我还耐心实现了几个自定义类型的TypeConverter,(相信针对特定类型实现转换器,大伙儿都有自己的两把刷子,不废话了)。但是,想起来还有很多自定义类型,我实在忍无可忍了。
根据以往实现TypeConverter的经验,发现了这些“类型转换器”之间很多的共同之处。抓住这点,我决定实现一个“通用的类型转换器”,把大部分的工作都交由它处理,岂不乐哉。
开始
在.Net或C++中,要实现“通用性”,大家第一个想起来的肯定就是泛型了,不错,实现这个无非是使用了下面的几项技术:泛型,反射。
现把这个“通用类型转换器”公布出来,可能还有些纰漏之处,还请大家多指教。
使用举例
1、对属性进行分组编辑:
一些自定义类型
在自定义的控件中使用LinearBrush类型添加一个属性
在VS属性设计框中就可以看到效果了。
2、自定义类型和字符串之间的转换
结束
以上就是“通用类型转换器”的代码,及其使用举例,希望能减轻一点大家的重复的工作量,有什么不当之处,还请指出,方便大家,共同提高。