Asp.net 3.5控件和组件开发技术系列—服务器控件属性(四)
object obj4 = propertyValues["Z"]; if (((obj2 == null) || (obj3 == null) || (obj4 == null)) || (!(obj2 is int) || !(obj3 is int) || !(obj4 is int))) { throw new Exception("鯉塀音屎鳩!"); } return new SolidCoordinate((int)obj2,(int)obj3,(int)obj4); } public override bool GetPropertiesSupported(ITypeDescriptorContext context) { return true; } public override PropertyDescriptorCollection GetProperties (ITypeDescriptor Context context,object value,Attribute[] attributes) { return TypeDescriptor.GetProperties(typeof(SolidCoordinate),attributes). Sort(new string[] { "X","Y","Z" }); } } SolidCoordinateConverter 类继承于类型转换器基类TypeConverter ,主要重写 TypeConverter 类的一些可重写方法,从而实现自定义的类型转换器。 方法CanConvertFrom 具有两个参数,第一个参数表示当前上下文变量,通过此参数可以获取当 前容器、当前类实例和属性描述等信息;第二个参数sourceType 表示当前要转换的类型。在这里 ,此方法主要判断是否能从第二个参数的类型(源类型)转换为SolidCoordinate 类型,如果源类 型是字符串,则返回true ,否则调用基方法,由基方法来决定返回值。 方法CanConvertTo 同样也具有两个参数,第一个参数与上面CanConvertTo 相同意义;第二个 参数destinationType 表示要转化到的目标类型。该方法在这里表示是否能够把SolidCoordinate 转换为destinationType 类型。方法体中的InstanceDescriptor 类表示实例描述类,提供创建对 象所需的信息,在后面ConvertTo 方法中会详细介绍。切换到源代码视图时所有代码都是以string 类型标记的。 方法ConvertFrom 具有三个参数,第一个参数为ITypeDescriptorContext 类型的context ,与 前面CanConverFrom 中参数具有相同意义;第二个参数为CultureInfo 类型的culture ,提供有关 特定区域性的信息(如区域性的名称、书写系统和使用的日历),以及设置日期和字符串 排序的 格式。CultureInfo 类保存区域性特定的信息,如关联的语言、子语言、国家/ 地区、日历和区域 性约定。此类还提供对DateTimeFormatInfo 、NumberFormatInfo 、CompareInfo 和TextInfo 的 区域性特定实例的访问,在方法ConverFrom 中使用到了访问它的TextInfo 信息;第三个参数为 object 的value ,表示要进行转换的类型,这里是要把value 转换为SolidCoordinate 类型。 ConverFrom 方法体中代码部分主要实现从源类型(第三个参数value )到类型 SolidCoordinate 的转换,最后返回一个SolidCoordinate 类型的实例。value 在这里其实是一个 “3,5,8 ”格式的字符串。首先根据区域文化对象获取到分隔符:
分隔符也可以直接固定为逗号,如char ch ="," ;既然在curture 的TextInfo 对象中提供了 分隔符,我们就直接使用它定义的。在TextInfo 下的ListSeparator 是一个分隔符列表数组,第 一项为"," ,所以我们就取它的ListSeparator[0] 作为分隔符。 然后把value 值通过分隔符拆分到一个字符串数组中:
由于SolidCoordinate 类的三个属性(X,Y,Z )都是整型的,因此我们再定义一个整型数组 numArray ,并使用系统的int 类型转换器的方法把字符串数组中的每项都转换 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |