没有找到合适的产品?
联系客服协助选型:023-68661681
提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
转帖|其它|编辑:郝浩|2011-09-20 14:19:48.000|阅读 592 次
概述:C#类型转换器的实现是如何的呢?具体的操作是什么呢?那么这里就向你介绍C#类型转换器的实现需要重写四个方法,下面我们来具体看看细节是如何操作的。
# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>
C#类型转换器的实现是如何的呢?具体的操作是什么呢?那么这里就向你介绍C#类型转换器的实现需要重写四个方法,下面我们来具体看看细节是如何操作的。
C#类型转换器的实现所用重写的方法:
◆CanConvertFrom()――根据类型参数进行测试,判断是否能从这个类型转换成当前类型,在本例中我们只提供转换string和InstanceDescriptor类型的能力。
◆CanConvertTo()――根据类型参数进行测试,判断是否能从当前类型转换成指定的类型。
◆ConvertTo()――将参数value的值转换为指定的类型。
◆ConvertFrom()――串换参数value,并返回但书类型的一个对象。
C#类型转换器的实现实例:
1. public override object ConvertTo(
2. ITypeDescriptorContext context,
3. System.Globalization.CultureInfo culture,
4. object value, Type destinationType)
5. {
6. String result = "";
7. if (destinationType == typeof(String))
8. {
9. Scope scope = (Scope)value;
10. result = scope.Min.ToString()+"," + scope.Max.ToString();
11. return result;
12.
13. }
14.
15. if (destinationType == typeof(InstanceDescriptor))
16. {
17. ConstructorInfo ci =
18. typeof(Scope).GetConstructor(
19. new Type[] {typeof(Int32),typeof(Int32) });
20. Scope scope = (Scope)value;
21. return new InstanceDescriptor(
22. ci, new object[] { scope.Min,scope.Max });
23. }
24. return base.ConvertTo(context,
25. culture, value, destinationType);
26. }
上面是ConvertTo的实现,如果转换的目标类型是string,我将Scope的两个属性转换成string类型,并且用一个“,”连接起来,这就是我们在属性浏览器里看到的表现形式,如图:
如果转换的目标类型是实例描述器(InstanceDescriptor,它负责生成实例化的代码),我们需要构造一个实例描述器,构造实例描述器的时候,我们要利用反射机制获得Scope类的构造器信息,并在new的时候传入Scope实例的两个属性值。实例描述器会为我们生成这样的代码:this.myListControl1.Scope = new CustomControlSample.Scope(10, 200);在最后不要忘记调用 base.ConvertTo(context, culture, value, destinationType),你不需要处理的转换类型,交给基类去做好了。
1. public override object ConvertFrom(
2. ITypeDescriptorContext context,
3. System.Globalization.CultureInfo culture,
4. object value)
5. {
6. if (value is string)
7. {
8. String[] v = ((String)value).Split(',');
9. if (v.GetLength(0) != 2)
10. {
11. throw new ArgumentException(
12. "Invalid parameter format");
13. }
14.
15. Scope csf = new Scope();
16. csf.Min = Convert.ToInt32(v[0]);
17. csf.Max = Convert.ToInt32(v[1]);
18. return csf;
19. }
20. return base.ConvertFrom(context, culture, value);
21. }
22. }
上面是ConvertFrom的代码,由于系统能够直接将实例描述器转换为Scope类型,所以我们就没有必要再写代码,我们只需要关注如何将 String(在属性浏览出现的属性值的表达)类型的值转换为Scope类型。没有很复杂的转换,只是将这个字符串以“,”分拆开,并串换为Int32类型,然后new一个Scope类的实例,将分拆后转换的两个整型值赋给Scope的实例,然后返回实例。在这段代码里,我们要判断一下用户设定的属性值是否有效。比如,如果用户在Scope属性那里输入了“10200”,由于没有输入“,”,我们无法将属性的值分拆为两个字符串,也就无法进行下面的转换,所以,我们要抛出一个异常,通知用户重新输入。
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@dpuzeg.cn
文章转载自:网络转载面对“数字中国”建设和中国制造2025战略实施的机遇期,中车信息公司紧跟时代的步伐,以“集约化、专业化、标准化、精益化、一体化、平台化”为工作目标,大力推进信息服务、工业软件等核心产品及业务的发展。在慧都3D解决方案的实施下,清软英泰建成了多模型来源的综合轻量化显示平台、实现文件不失真的百倍压缩比、针对模型中的大模型文件,在展示平台上进行流畅展示,提升工作效率,优化了使用体验。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@dpuzeg.cn
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢