Surance Center

类型转化器及其实现--1

用于
1.字符串到值的转换
2.设计时和运行时的转换



实现:
对于多数基本数据类型(如Int32,Bool,Char,String,枚举类型等),.Net框架已经提供了默认的类型转换器.
默认的类型转换器继承自 System.ComponentModel.TypeConverter类,名为TypeConverterNameConverter
如:属性被设置为 Height="150px",但是其实属性是Unit型.这时候面临的问题,就是将"150px"转换为Unit类型.
页面编译器会自动调用System.Web.UI.WEbControls.UnitConverter完成此转换.


然而,上面的方法只能解决1部分问题.随意要自定义类型转换器.

自定义类型转换器可以分为3种:
   值翻译的类型转换器,
   向IDE提供标准值列表的类型转换器
   实现生成基于构造函数的属性初始化代码的类型转换器


分别介绍:
1.值类型的类型转换器
   主要完成String向属性类型的转换

using System;
using System.Collections.Generic;
using System.Text;
using System.ComponentModel;
using System.Globalization;
using System.Drawing;


namespace USERControls
{
    
public class TestConverter:TypeConverter
    
{
        
public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)
        
{
            
if (sourceType == typeof(String))
                
return true;
            
else
            
{
                
return base.CanConvertFrom(context, sourceType);
            }

        }


        
public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)
        
{
            
if (value is string)
            
{
                
string[] v=((string)value).Split(new char[]{','});
                
return new Point(int.Parse(v[0]),int.Parse(v[1]));

            }

            
return base.ConvertFrom(context, culture, value);
        }


        
public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType)
        
{
            
if (destinationType == typeof(string))
            
{
                
return ((Point)value).X + "," + ((Point)value).Y;
            }

            
return base.ConvertTo(context, culture, value, destinationType);
        }

        
    }

}

posted @ 2007-06-04 22:04  xxp  阅读(233)  评论(0编辑  收藏  举报
Surance Center