前言
我们在开发复杂控件的时候不可避免的碰到类型转换TypeConverter,微软给我们提供了很多转换类如ArrayConverter,BaseNumberConverter,BooleanConverter(MSDN上更多:ms-help://MS.MSDNQTR.v80.en/MS.MSDN.v80/MS.NETDEVFX.v20.en/cpref3/html/N_System_ComponentModel.htm)等直接或间接的继承了TypeConverter类。我们在类型转换的时候经常用到这些类。然而我们如何编写自定义的TypeConverter类呢,又怎么样在复杂控件中使用呢。
TypeConverter Class
TypeConverter类就是将一种类型(object,可以说是任何类型)转换到另一种类型(一般为string),或者将另一种类型转换回来。所有继承TypeConverter类型的都必须实现4个方法:(这里以另一种类型string为例)
![](https://i-blog.csdnimg.cn/blog_migrate/6bcc21092ce0f69de2fefda7f5846606.jpeg)
TypeConverter.CanConvertTo (Type)
TypeConverter.CanConvertTo (ITypeDescriptorContext, Type)
都有一个Type参数(要转换成什么类型),例如我们设计的要转换成string,在方法体里面判断这个参数的Type如果是string,则返回true,否则返回 false
![](https://i-blog.csdnimg.cn/blog_migrate/6bcc21092ce0f69de2fefda7f5846606.jpeg)
TypeConverter.ConvertTo (Object, Type)
TypeConverter.ConvertTo (ITypeDescriptorContext, CultureInfo, Object, Type)
都有Object和Type参数,将Object转成Type类型的Object,返回Type类型的Object。
下面类似的两个方法,不过方向相反,是从其他类型装换回来。
![](https://i-blog.csdnimg.cn/blog_migrate/6bcc21092ce0f69de2fefda7f5846606.jpeg)
TypeConverter.CanConvertFrom (Type)
TypeConverter.CanConvertFrom (ITypeDescriptorContext, Type)
在方法体里面判断参数Type是不是能转换回来的类型,例如string类型,如果是返回true,否则返回false。
![](https://i-blog.csdnimg.cn/blog_migrate/6bcc21092ce0f69de2fefda7f5846606.jpeg)
TypeConverter.ConvertFrom (Object)
TypeConverter.ConvertFrom (ITypeDescriptorContext, CultureInfo, Object)
在方法体里面判断参数Object的类型是不是能转换回来的类型,例如string类型,如果是返回转换回来的类型。
举例说明,以GPS经纬度位置为例,经纬度位置GPSLocation包括复杂属性经度
Longitude和纬度
Latitude
。现我们根据其一属性Longitude类写个LongtitudeTypeConverter类。
首先我们得有个Longtitude类吧。