组件编程(5) TypeConverterAttribute,类型转换
2006-04-06 11:21
381 查看
上一篇文章是03-08写的,距离今天已经有十多天了没有写了,主要是最近太忙了,而且在工作上遇到了一些难点,所以没有时间放在blog上,实在是对不住大家。
今天的这篇文章,我主要是带来PropertyAttribute里的TypeConverterAttribute的讲解,首先在这里讲讲TypeConverterAttribute的作用是什么:当Component的某个Property被设置时,如Size="60,70",解析器会通过类型转化器,把这个字符串自动转换为属性声明的类型。.net的框架中已经声明了很多的类型转化器,下面的代码中有列举到。有点类似于operator。
同时在Asp.net服务器控件的编写中TypeConverterAttribute也将会非常有用,服务器控件的Property只能以string形式保存在aspx页面里,而在服务器控件的DesignTime和RunTime时必须要把string转换为相应的类型。
源代码如下:源代码下载
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/None.gif)
using System;
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/None.gif)
using System.Collections.Generic;
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/None.gif)
using System.Text;
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/None.gif)
using System.ComponentModel;
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/None.gif)
using System.Globalization;
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/None.gif)
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/None.gif)
namespace ClassLibrary1
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030194/b854634c0904529d4018c4c3336be836.gif)
{
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
public class Class1 : Component
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030194/b854634c0904529d4018c4c3336be836.gif)
{
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
private Size _size;
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
public Class1()
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030194/b854634c0904529d4018c4c3336be836.gif)
{
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
_size = new Size();
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
[TypeConverter(typeof(SizeConverter))] // —— 注1,也可以把这句TypeConverterAttribute写在注2处。
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
public Size Size
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030194/b854634c0904529d4018c4c3336be836.gif)
{
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
get
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030194/b854634c0904529d4018c4c3336be836.gif)
{ return _size; }
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
set
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030194/b854634c0904529d4018c4c3336be836.gif)
{ _size = value; }
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
public class SizeConverter : TypeConverter // 我们自定义的Converter必须继承于TypeConverter基类。
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030194/b854634c0904529d4018c4c3336be836.gif)
{
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
/**//// <summary>
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
/// 是否能用string转换到Size类型。
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
/// </summary>
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
/// <param name="context">上下文。</param>
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
/// <param name="sourceType">转换源的Type。</param>
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
/// <returns></returns>
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030194/b854634c0904529d4018c4c3336be836.gif)
{
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
if (sourceType == typeof(string))
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030194/b854634c0904529d4018c4c3336be836.gif)
{ return true; }
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
else
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030194/b854634c0904529d4018c4c3336be836.gif)
{ return false; }
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
/**//// <summary>
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
/// 从string转到Size类型。
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
/// </summary>
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
/// <param name="context">提供Component的上下文,如Component.Instance对象等。</param>
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
/// <param name="culture">提供区域信息,如语言、时间格式、货币格式等</param>
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
/// <param name="value"></param>
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
/// <returns></returns>
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
public override object ConvertFrom(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value)
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030194/b854634c0904529d4018c4c3336be836.gif)
{
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
if (value == null || value.ToString().Length == 0) return new Size();
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
char spliter = culture.TextInfo.ListSeparator[0]; // 得到字符串的分隔符
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
string[] ss = ((string)value).Split(spliter);
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
Int32Converter intConverter = new Int32Converter(); // 得到类型转换器,.net中为我们定义了一些常见的类型转换器。
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
return new Size((Int32)intConverter.ConvertFromString(context, culture, ss[0]),
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
(Int32)intConverter.ConvertFromString(context, culture, ss[1]));
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
/**//// <summary>
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
/// 是否能用Size转换到string类型。
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
/// </summary>
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
/// <param name="context"></param>
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
/// <param name="destinationType">转换目标的类型。</param>
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
/// <returns></returns>
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType)
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030194/b854634c0904529d4018c4c3336be836.gif)
{
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
if (destinationType == typeof(Size)) // 如果是Size格式,则允许转成string。
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030194/b854634c0904529d4018c4c3336be836.gif)
{ return true; }
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
else
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030194/b854634c0904529d4018c4c3336be836.gif)
{ return false; }
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
// 在Property窗口中显示为string类型。
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
public override object ConvertTo(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value, Type destinationType)
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030194/b854634c0904529d4018c4c3336be836.gif)
{
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
if (value == null) return string.Empty;
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
if (destinationType == typeof(string))
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030194/b854634c0904529d4018c4c3336be836.gif)
{
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
Size size = (Size)value;
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
TypeConverter intConverter = TypeDescriptor.GetConverter(typeof(Int32)); // 能到类型转换器的另一种方式。
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
char spliter = culture.TextInfo.ListSeparator[0]; // 得到字符串的分隔符
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
return string.Join(spliter.ToString(), new string[]
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030194/b854634c0904529d4018c4c3336be836.gif)
{
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
intConverter.ConvertToString(context, culture, size.Length),
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
intConverter.ConvertToString(context, culture, size.Width)});
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
return string.Empty;
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
// TypeConverter还有几个虚方法,请大家自己研究。
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
// [TypeConverter(typeof(SizeConverter))] —— 注2
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
public class Size
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030194/b854634c0904529d4018c4c3336be836.gif)
{
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
private Int32 _length;
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
private Int32 _width;
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
public Size(Int32 length, Int32 width)
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030194/b854634c0904529d4018c4c3336be836.gif)
{
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
_length = length;
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
_width = width;
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
public Size() : this(0, 0)
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030194/b854634c0904529d4018c4c3336be836.gif)
{
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
public Int32 Length
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030194/b854634c0904529d4018c4c3336be836.gif)
{
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
get
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030194/b854634c0904529d4018c4c3336be836.gif)
{ return _length; }
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
set
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030194/b854634c0904529d4018c4c3336be836.gif)
{ _length = value; }
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
public Int32 Width
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030194/b854634c0904529d4018c4c3336be836.gif)
{
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
get
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030194/b854634c0904529d4018c4c3336be836.gif)
{ return _width; }
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
set
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030194/b854634c0904529d4018c4c3336be836.gif)
{ _width = value; }
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201910/12/957d45529124a2d57189b7b8bc7adf30.jpg)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201910/12/34ebec2868b1a90a4a3bc7067dc96a10.jpg)
下一篇文章将为大家带来Component Designer的讲解。
今天的这篇文章,我主要是带来PropertyAttribute里的TypeConverterAttribute的讲解,首先在这里讲讲TypeConverterAttribute的作用是什么:当Component的某个Property被设置时,如Size="60,70",解析器会通过类型转化器,把这个字符串自动转换为属性声明的类型。.net的框架中已经声明了很多的类型转化器,下面的代码中有列举到。有点类似于operator。
同时在Asp.net服务器控件的编写中TypeConverterAttribute也将会非常有用,服务器控件的Property只能以string形式保存在aspx页面里,而在服务器控件的DesignTime和RunTime时必须要把string转换为相应的类型。
源代码如下:源代码下载
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/None.gif)
using System;
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/None.gif)
using System.Collections.Generic;
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/None.gif)
using System.Text;
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/None.gif)
using System.ComponentModel;
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/None.gif)
using System.Globalization;
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/None.gif)
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/None.gif)
namespace ClassLibrary1
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030194/b854634c0904529d4018c4c3336be836.gif)
{
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
public class Class1 : Component
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030194/b854634c0904529d4018c4c3336be836.gif)
{
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
private Size _size;
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
public Class1()
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030194/b854634c0904529d4018c4c3336be836.gif)
{
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
_size = new Size();
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
[TypeConverter(typeof(SizeConverter))] // —— 注1,也可以把这句TypeConverterAttribute写在注2处。
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
public Size Size
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030194/b854634c0904529d4018c4c3336be836.gif)
{
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
get
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030194/b854634c0904529d4018c4c3336be836.gif)
{ return _size; }
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
set
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030194/b854634c0904529d4018c4c3336be836.gif)
{ _size = value; }
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
public class SizeConverter : TypeConverter // 我们自定义的Converter必须继承于TypeConverter基类。
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030194/b854634c0904529d4018c4c3336be836.gif)
{
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
/**//// <summary>
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
/// 是否能用string转换到Size类型。
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
/// </summary>
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
/// <param name="context">上下文。</param>
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
/// <param name="sourceType">转换源的Type。</param>
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
/// <returns></returns>
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030194/b854634c0904529d4018c4c3336be836.gif)
{
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
if (sourceType == typeof(string))
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030194/b854634c0904529d4018c4c3336be836.gif)
{ return true; }
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
else
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030194/b854634c0904529d4018c4c3336be836.gif)
{ return false; }
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
/**//// <summary>
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
/// 从string转到Size类型。
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
/// </summary>
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
/// <param name="context">提供Component的上下文,如Component.Instance对象等。</param>
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
/// <param name="culture">提供区域信息,如语言、时间格式、货币格式等</param>
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
/// <param name="value"></param>
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
/// <returns></returns>
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
public override object ConvertFrom(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value)
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030194/b854634c0904529d4018c4c3336be836.gif)
{
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
if (value == null || value.ToString().Length == 0) return new Size();
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
char spliter = culture.TextInfo.ListSeparator[0]; // 得到字符串的分隔符
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
string[] ss = ((string)value).Split(spliter);
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
Int32Converter intConverter = new Int32Converter(); // 得到类型转换器,.net中为我们定义了一些常见的类型转换器。
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
return new Size((Int32)intConverter.ConvertFromString(context, culture, ss[0]),
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
(Int32)intConverter.ConvertFromString(context, culture, ss[1]));
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
/**//// <summary>
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
/// 是否能用Size转换到string类型。
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
/// </summary>
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
/// <param name="context"></param>
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
/// <param name="destinationType">转换目标的类型。</param>
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
/// <returns></returns>
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType)
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030194/b854634c0904529d4018c4c3336be836.gif)
{
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
if (destinationType == typeof(Size)) // 如果是Size格式,则允许转成string。
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030194/b854634c0904529d4018c4c3336be836.gif)
{ return true; }
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
else
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030194/b854634c0904529d4018c4c3336be836.gif)
{ return false; }
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
// 在Property窗口中显示为string类型。
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
public override object ConvertTo(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value, Type destinationType)
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030194/b854634c0904529d4018c4c3336be836.gif)
{
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
if (value == null) return string.Empty;
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
if (destinationType == typeof(string))
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030194/b854634c0904529d4018c4c3336be836.gif)
{
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
Size size = (Size)value;
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
TypeConverter intConverter = TypeDescriptor.GetConverter(typeof(Int32)); // 能到类型转换器的另一种方式。
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
char spliter = culture.TextInfo.ListSeparator[0]; // 得到字符串的分隔符
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
return string.Join(spliter.ToString(), new string[]
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030194/b854634c0904529d4018c4c3336be836.gif)
{
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
intConverter.ConvertToString(context, culture, size.Length),
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
intConverter.ConvertToString(context, culture, size.Width)});
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
return string.Empty;
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
// TypeConverter还有几个虚方法,请大家自己研究。
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
// [TypeConverter(typeof(SizeConverter))] —— 注2
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
public class Size
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030194/b854634c0904529d4018c4c3336be836.gif)
{
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
private Int32 _length;
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
private Int32 _width;
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
public Size(Int32 length, Int32 width)
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030194/b854634c0904529d4018c4c3336be836.gif)
{
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
_length = length;
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
_width = width;
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
public Size() : this(0, 0)
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030194/b854634c0904529d4018c4c3336be836.gif)
{
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
public Int32 Length
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030194/b854634c0904529d4018c4c3336be836.gif)
{
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
get
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030194/b854634c0904529d4018c4c3336be836.gif)
{ return _length; }
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
set
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030194/b854634c0904529d4018c4c3336be836.gif)
{ _length = value; }
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
public Int32 Width
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030194/b854634c0904529d4018c4c3336be836.gif)
{
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
get
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030194/b854634c0904529d4018c4c3336be836.gif)
{ return _width; }
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
set
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030194/b854634c0904529d4018c4c3336be836.gif)
{ _width = value; }
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
![](http://mapserver.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201910/12/957d45529124a2d57189b7b8bc7adf30.jpg)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201910/12/34ebec2868b1a90a4a3bc7067dc96a10.jpg)
下一篇文章将为大家带来Component Designer的讲解。
相关文章推荐
- .NET组件编程(5) TypeConverterAttribute,类型转换
- 深入Atlas系列:Web Sevices Access in Atlas示例(5) - 自定义TypeConverter把基础类型转换为复杂类型
- struts2自定义类型转换(1)基于DefaultTypeConverter
- struts2日期类型转换,继承StrutsTypeConverter
- Spring.Net -- 如何使用用户自定义类型转换器 (Custom Type Converter )
- Attribute在.Net编程中的应用和C#类型转换
- 深入Atlas系列:Web Sevices Access in Atlas示例(5) - 自定义TypeConverter把基础类型转换为复杂类型
- struts2自定义类型转换(2)基于StrutsTypeConverter
- Struts2——基于StrutsTypeConverter的类型转换
- struts2自定义类型转换(2)基于StrutsTypeConverter
- struts2自定义类型转换(2)基于StrutsTypeConverter
- struts2学习(一)类型转换--DefaultTypeConverter
- struts2自定义类型转换(1)基于DefaultTypeConverter
- 深入Atlas系列:Web Sevices Access in Atlas示例(5) - 自定义TypeConverter把基础类型转换为复杂类型
- Struts2类型转换TypeConverter源码阅读笔记
- struts2自定义类型转换(1)基于DefaultTypeConverter
- Java基本类型转换(Primitive Data Type Casting) int/byte & char
- Struts2学习笔记(十一) 类型转换(Type Conversion)(上)
- SpringMVC之类型转换Converter
- ASP.NET AJAX客户端编程之旅(三)——让JavaScript和C#无障碍沟通:数据类型自动转换&序列化(转载)