|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
说句实话,Java跨平台根本就不是外行人想想的那种,一次编译,处处运行。 早闻.NET2.0中泛型的台甫,但一向未在实践开辟中利用。
比来在开辟博客园网站程序的过程当中体验了一下。
使用场景:
在设置文件中经由过程反序列化读取响应的邮件设置。
设置文件示例:
<BlogConfigurationSettings>
<MailSettings>
<MailSettingName="ApproveEmail"SmtpServer="smtp.126.com"EmailFrom=""UserName=""PassWord=""></MailSetting>
<MailSettingName="ContactEmail"SmtpServer="smtp.163.com"EmailFrom=""UserName=""PassWord=""></MailSetting>
</MailSettings>
</BlogConfigurationSettings>
功效申明:
经由过程该设置文件,反序列化失掉BlogConfigurationSettings实例的属性MailSettings,然后依据关头字失掉响应的MailSetting,好比:名为ApproveEmail的MailSetting。
MailSetting的界说:
MailSetting
[Serializable]
publicclassMailSetting
{
privatestring_name;
[XmlAttribute("Name")]
publicstringName
{
get{return_name;}
set{_name=value;}
}
privatestring_smtpServer;
[XmlAttribute("SmtpServer")]
publicstringSmtpServer
{
get{return_smtpServer;}
set{_smtpServer=value;}
}
privatestring_mailFrom;
[XmlAttribute("MailFrom")]
publicstringMailFrom
{
get{return_mailFrom;}
set{_mailFrom=value;}
}
privatestring_username;
[XmlAttribute("UserName")]
publicstringUserName
{
get{return_username;}
set{_username=value;}
}
privatestring_password;
[XmlAttribute("Password")]
publicstringPassword
{
get{return_password;}
set{_password=value;}
}
publicstringKey
{
get{returnthis.Name;}
}
}
假如不利用泛型,我们能够经由过程数组大概汇合类来完成。
关于数组,我们必要在BlogConfigurationSettings举行如许的界说:
privateMailSetting[]__mailSettings;
[XmlArray("MailSettings")]
publicMailSetting[]MailSettings
{
get{returnthis._mailSettings;}
set{this._mailSettings=value;}
}
我们还必要写一个办法往列举数组元素,依据关头字前往响应的MailSetting。
关于汇合类,必要在BlogConfigurationSettings举行如许的界说:
privateMailSettingColletion_mailSettings;
[XmlArray("MailSettings")]
publicMailSettingColletionMailSettings
{
get{returnthis._mailSettings;}
set{this._mailSettings=value;}
}
我们必要写一个MailSettingColletion类,而且在MailSettingColletion中完成一个办法往依据关头字查找响应的MailSetting。
关于泛型,我们只需在BlogConfigurationSettings举行以下的界说:
privateList<MailSetting>_mailSettings;
[XmlArray("MailSettings")]
publicList<MailSetting>MailSettings
{
get{return_mailSettings;}
set{_mailSettings=value;}
}
然后只需上面的一行代码就可以依据关头字失掉响应的MailSetting:
BlogConfigurationSettings.MailSettings.Find(delegate(MailSettingmailSetting){returnmailSetting.Key=="ApproveEmail";})
Find办法的参数范例是Predicate<T>,它的界说是:
publicdelegateboolPredicate<T>(Tobj)
也就是一个参数为泛型,前往值为bool的托付范例。
Find的功效就是列举List<T>中的元素,并以每一个元素作为托付的参数挪用托付,实践的托付办法是经由过程Find参数传送过去的,当挪用的托付前往true时,前往以后元素。
你也能够将下面的Find参数中的代码写为一个独自的办法,然后将办法名作为Find的参数。
BlogConfigurationSettings.MailSettings.Find(IsMe);
publicboolIsMe(MailSettingmailSetting)
{
returnmailSetting.Key=="ApproveEmail";
}
关于如许的代码,你当即会感应不恬逸,如许岂不要为每一个关头字写一个办法,你想应当如许写:
publicboolIsMe(MailSettingmailSetting,stringkey)
{
returnmailSetting.Key==key;
}
如许写固然好啊,但是Find却分歧意,它的参数只同意是带有一个参数的办法。
那怎样办理这个成绩呢?
我想到的一个办理办法,写一个MailSettingPredicate类:
publicclassMailSettingPredicate
{
privatestringkey;
publicstringKey
{
get{returnkey;}
set{key=value;}
}
publicboolIsMe(MailSettingmailSetting)
{
returnmailSetting.Key==this.key;
}
}
在挪用IsMe之前,先设置MailSettingManager.Key的值,代码以下:
MailSettingPredicatepredicate=newMailSettingPredicate();
predicate.Key="ApproveEmail";
Config.Settings.MailSettings.Find(predicate.IsMe);
predicate.Key="ContactEmail";
Config.Settings.MailSettings.Find(predicate.IsMe);
我在实践开辟中方才利用.NET2.0的泛型,写这篇文章是想加深本人的了解,同时但愿给不熟习.NET2.0泛型的伴侣供应一点参考,不敷的地方,接待您指出。
我感觉可以顶到50楼,出乎意料的是大家居然纷纷写出自己的博文,还被编辑做成了专题,置于首页头条。 |
|