快速业务通道

Asp.net 3.5控件和组件开发技术系列—服务器控件属性(四)

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-20
为整型存储到整型 数组中:

int[] numArray = new int[strArray.Length];
TypeConverter converter = TypeDescriptor.GetConverter(typeof(int));
for (int i = 0; i < numArray.Length; i++)
{
   numArray[i]=(int)converter.ConvertFromString(context,culture,strArray[i]);
}

注意上面TypeDescriptor 的静态方法GetConverter 是怎样使用的,系统转换器和我们定义的 任何转换器都是可以这么使用。

最后,返回一个SolidCoordinate 类型的实例:

return new SolidCoordinate(numArray[0],numArray[1],numArray[2]);

这就是ConvertFrom 方法的实现过程。在这里面的转换规则是任意定义的,只要与ConvertTo 规则一致即可。

下面我们来讲解一下ConvertTo 方法的实现逻辑。ConverTo 方法的前三个参数与ConvertFrom 方法中的前三个参数表示的意义相同;第四个参数表示要转换到的目标类型:string 或 InstanceDescriptor 。ConverTo 代码中的逻辑与ConvertFrom 中的是一个相反转换的过程,即把 SolidCoordinate 转换成string 或InstanceDescriptor ,代码逻辑部分就不再详细阐述。

这里仅说一下目标类型为类InstanceDescriptor 的情况,什么时候需要转换为 InstanceDescriptor ?.NET 框架中提供了在设计时生成可动态配置的属性初始化代码的功能。开 发人员可以构建一个产生基于构造函数的初始化代码的类型转换器。为了在运行时配置类型属性, 这些类型转换器可以使用在设计时设置的值来动态生成构造函数代码。当某个属性是可读写时,就 需要将属性的类型转换成 InstanceDescriptor 类型,并且解析器也需要产生创建该类型实例的代 码,InstanceDescriptor 对象提供了用来创建以参数类型传递给ConvertTo 方法的 SolidCoordinate 实例的构造器的有关信息。这些信息是解析器产生创建SolidCoordinate 类型的 一个实例的代码时所使用的。在构造函数中的使用示例:

/// <summary>
/// 获得本书更多内容,请看:
/// http://blog.csdn.net/ChengKing/archive/2008/08/18/2792440.aspx
/// </summary>

public class InstanceDescriptorControl : Control
{
   SolidCoordinate solidCoordinate;
   public InstanceDescriptorControl() {
     solidCoordinate = new SolidCoordinate(1,2,3);
   }
   public SolidCoordinate SolidCoordinate {
     get
     {
       return solidCoordinate;
     }
     set
     {
       solidCoordinate = value;
     }
   }
}

上面代码中SolidCoordinate 类型的属性SolidCoordinate 是可读写的(同时具有get 和set 语句),这就需要生成InstanceDescriptor 实例的代码。也就是说,如果使用了set 语句,但这 句:

if (destinationType == typeof(InstanceDescriptor))
{
   //… …
}

没有实现,这样编译后的控件所在的页面编译时不会通过。读者可以打开本书随书光盘中对应 的源代码,把上段代码进行注释后,测试一下,理解起来会更加深刻。

方法GetCreateInstanceSupported 返回bool 类型。如果更改此对象的属性需要调用 CreateInstance 来创建新值,则返回true ;否则返回false 。

方法CreateInstance 根据上下文和指定的属性字典创建实例。IDictionary 类型的参数 propertyValues 是一个属性字典集合,存储了创建对象所需的值。例如:

object obj2 = propertyValues["X"];
object obj3 = propertyValues["Y"];
object obj4 = propertyValues["Z"];

就是从字典集合中取得三个坐标值。最后根据三个坐标值返回SolidCoordinat

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号