C#类型转换器的实现是如何的呢?具体的操作是什么呢?那么这里就向你介绍C#类型转换器的实现需要重写四个方法,下面我们来具体看看细节是如何操作的。

C#类型转换器的实现所用重写的方法:
◆CanConvertFrom()――根据类型参数进行测试,判断是否能从这个类型转换成当前类型,在本例中我们只提供转换string和InstanceDescriptor类型的能力。
◆CanConvertTo()――根据类型参数进行测试,判断是否能从当前类型转换成指定的类型。
◆ConvertTo()――将参数value的值转换为指定的类型。
◆ConvertFrom()――串换参数value,并返回但书类型的一个对象。
C#类型转换器的实现实例:
- public override object ConvertTo(
 - ITypeDescriptorContext context,
 - System.Globalization.CultureInfo culture,
 - object value, Type destinationType)
 - {
 - String result = "";
 - if (destinationType == typeof(String))
 - {
 - Scope scope = (Scope)value;
 - result = scope.Min.ToString()+"," + scope.Max.ToString();
 - return result;
 - }
 - if (destinationType == typeof(InstanceDescriptor))
 - {
 - ConstructorInfo ci =
 - typeof(Scope).GetConstructor(
 - new Type[] {typeof(Int32),typeof(Int32) });
 - Scope scope = (Scope)value;
 - return new InstanceDescriptor(
 - ci, new object[] { scope.Min,scope.Max });
 - }
 - return base.ConvertTo(context,
 - culture, value, destinationType);
 - }
 
上面是ConvertTo的实现,如果转换的目标类型是string,我将Scope的两个属性转换成string类型,并且用一个“,”连接起来,这就是我们在属性浏览器里看到的表现形式,如图:
如果转换的目标类型是实例描述器(InstanceDescriptor,它负责生成实例化的代码),我们需要构造一个实例描述器,构造实例描述器的时候,我们要利用反射机制获得Scope类的构造器信息,并在new的时候传入Scope实例的两个属性值。实例描述器会为我们生成这样的代码:this.myListControl1.Scope = new CustomControlSample.Scope(10, 200);在最后不要忘记调用 base.ConvertTo(context, culture, value, destinationType),你不需要处理的转换类型,交给基类去做好了。
- public override object ConvertFrom(
 - ITypeDescriptorContext context,
 - System.Globalization.CultureInfo culture,
 - object value)
 - {
 - if (value is string)
 - {
 - String[] v = ((String)value).Split(',');
 - if (v.GetLength(0) != 2)
 - {
 - throw new ArgumentException(
 - "Invalid parameter format");
 - }
 - Scope csf = new Scope();
 - csf.Min = Convert.ToInt32(v[0]);
 - csf.Max = Convert.ToInt32(v[1]);
 - return csf;
 - }
 - return base.ConvertFrom(context, culture, value);
 - }
 - }
 
上面是ConvertFrom的代码,由于系统能够直接将实例描述器转换为Scope类型,所以我们就没有必要再写代码,我们只需要关注如何将String(在属性浏览出现的属性值的表达)类型的值转换为Scope类型。没有很复杂的转换,只是将这个字符串以“,”分拆开,并串换为Int32类型,然后new一个Scope类的实例,将分拆后转换的两个整型值赋给Scope的实例,然后返回实例。在这段代码里,我们要判断一下用户设定的属性值是否有效。比如,如果用户在Scope属性那里输入了“10200”,由于没有输入“,”,我们无法将属性的值分拆为两个字符串,也就无法进行下面的转换,所以,我们要抛出一个异常,通知用户重新输入。
C#类型转换器的实现的相关内容就向你介绍到这里,希望对你了解和学习C#类型转换器的实现有所帮助。
                分享文章:C#类型转换器的实现浅析
                
                网站地址:http://www.csdahua.cn/qtweb/news20/312820.html
            
网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网