|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
说句实话,Java跨平台根本就不是外行人想想的那种,一次编译,处处运行。编程 明天的这篇文章,我次要是带来PropertyAttribute里的TypeConverterAttribute的解说,起首在这里讲讲TypeConverterAttribute的感化是甚么:当Component的某个Property被设置时,如Size="60,70",剖析器会经由过程范例转化器,把这个字符串主动转换为属性声明的范例。.net的框架中已声了然良多的范例转化器,上面的代码中有枚举到。有点相似于operator。
同时在Asp.net服务器控件的编写中TypeConverterAttribute也将会十分有效,服务器控件的Property只能以string情势保留在aspx页面里,而在服务器控件的DesignTime和RunTime时必需要把string转换为响应的范例。
源代码以下:
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Text;
usingSystem.ComponentModel;
usingSystem.Globalization;
namespaceClassLibrary1
{
publicclassClass1:Component
{
privateSize_size;
publicClass1()
{
_size=newSize();
}
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
[TypeConverter(typeof(SizeConverter))]//――注1,也能够把这句TypeConverterAttribute写在注2处。
publicSizeSize
{
get{return_size;}
set{_size=value;}
}
}
publicclassSizeConverter:TypeConverter//我们自界说的Converter必需承继于TypeConverter基类。
{
/**////<summary>
///是不是能用string转换到Size范例。
///</summary>
///<paramname="context">高低文。</param>
///<paramname="sourceType">转换源的Type。</param>
///<returns></returns>
publicoverrideboolCanConvertFrom(ITypeDescriptorContextcontext,TypesourceType)
{
if(sourceType==typeof(string))
{returntrue;}
else
{returnfalse;}
}
/**////<summary>
///从string转到Size范例。
///</summary>
///<paramname="context">供应Component的高低文,如Component.Instance工具等。</param>
///<paramname="culture">供应地区信息,如言语、工夫格局、泉币格局等</param>
///<paramname="value"></param>
///<returns></returns>
publicoverrideobjectConvertFrom(ITypeDescriptorContextcontext,System.Globalization.CultureInfoculture,objectvalue)
{
if(value==null||value.ToString().Length==0)returnnewSize();
charspliter=culture.TextInfo.ListSeparator[0];//失掉字符串的分开符
string[]ss=((string)value).Split(spliter);
Int32ConverterintConverter=newInt32Converter();//失掉范例转换器,.net中为我们界说了一些罕见的范例转换器。
returnnewSize((Int32)intConverter.ConvertFromString(context,culture,ss[0]),
(Int32)intConverter.ConvertFromString(context,culture,ss[1]));
}
/**////<summary>
///是不是能用Size转换到string范例。
///</summary>
///<paramname="context"></param>
///<paramname="destinationType">转换方针的范例。</param>
///<returns></returns>
publicoverrideboolCanConvertTo(ITypeDescriptorContextcontext,TypedestinationType)
{
if(destinationType==typeof(Size))//假如是Size格局,则同意转成string。
{returntrue;}
else
{returnfalse;}
}
//在Property窗口中显现为string范例。
publicoverrideobjectConvertTo(ITypeDescriptorContextcontext,System.Globalization.CultureInfoculture,objectvalue,TypedestinationType)
{
if(value==null)returnstring.Empty;
if(destinationType==typeof(string))
{
Sizesize=(Size)value;
TypeConverterintConverter=TypeDescriptor.GetConverter(typeof(Int32));//能到范例转换器的另外一种体例。
charspliter=culture.TextInfo.ListSeparator[0];//失掉字符串的分开符
returnstring.Join(spliter.ToString(),newstring[]{
intConverter.ConvertToString(context,culture,size.Length),
intConverter.ConvertToString(context,culture,size.Width)});
}
returnstring.Empty;
}
//TypeConverter另有几个虚办法,请人人本人研讨。
}
//[TypeConverter(typeof(SizeConverter))]――注2
publicclassSize
{
privateInt32_length;
privateInt32_width;
publicSize(Int32length,Int32width)
{
_length=length;
_width=width;
}
publicSize():this(0,0)
{}
publicInt32Length
{
get{return_length;}
set{_length=value;}
}
publicInt32Width
{
get{return_width;}
set{_width=value;}
}
}
}
学习asp.net两个月有余了,除了对html、web控件比较熟悉(应该是说都能理解和接受)之外,竟不知道自己还会什么。看了两本书:《精通asp.net网络编程》(人民邮电出版社)、《asp.net实用案例教程》(清华大学出版社)。 |
|