仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 720|回复: 7
打印 上一主题 下一主题

[学习教程] ASP.NET教程之.NET2.0泛型的“近间隔”理论

[复制链接]
山那边是海 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:36:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
可怜的程序员,还是逃不出移植的命运!  早闻.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泛型的伴侣供应一点参考,不敷的地方,接待您指出。它有很多缺点的,有兴趣可以到网上去搜索一下。于是微软有发明了“下一代”C++:C++/CLI语言,这个可以解决在.NETFramework中,托管C++产生的问题。在《程序员》杂志上,lippman和李建中合作连载介绍了C++/CLI语言。
简单生活 该用户已被删除
沙发
发表于 2015-1-24 16:32:50 | 只看该作者
我觉得什么语言,精通就好,你要做的就是比其他80%的人都厉害,你就能得到只有20%的人才能得到的高薪。
若天明 该用户已被删除
板凳
发表于 2015-2-2 10:52:32 | 只看该作者
但是目前在CGI中使用的最为广泛的是Perl语言。所以,狭义上所指的CGI程序一般都是指Perl程序,一般CGI程序的后缀都是.pl或者.cgi。
再现理想 该用户已被删除
地板
发表于 2015-2-7 18:16:26 | 只看该作者
当然我们在选择Asp.net主机是,除了要考虑服务提供商在版本是否是实时更新以外,机房的环境和配置也是非常重要的,通常选择骨干网的机房,在速度和稳定性上会非常有保证。
兰色精灵 该用户已被删除
5#
发表于 2015-2-22 22:01:18 | 只看该作者
微软又推出ASP.NET。这不是ASP的简单升级,而是全新一代的动态网页实现系统,用于一台WEB服务器建立强大的应用程序。是微软发展的新体系结构.NET的一部分,是ASP和.NET技术的结合。
老尸 该用户已被删除
6#
发表于 2015-3-7 03:26:39 | 只看该作者
我的意思是.net好用,从功能上来说比JAVA强还是很明显的。
不帅 该用户已被删除
7#
发表于 2015-3-14 10:28:50 | 只看该作者
是指转换后的Servlet程序代码的行数。这给调试代码带来一定困难。所以,在排除错误时,可以采取分段排除的方法(在可能出错的代码前后输出一些字符串,用字符串是否被输出来确定代码段从哪里开始出错)。
山那边是海 该用户已被删除
8#
 楼主| 发表于 2015-3-21 03:27:47 | 只看该作者
比如封装性、继承性、多态性等等,这就解决了刚才谈到的ASP的那些弱点。封装性使得代码逻辑清晰,易于管理,并且应用到ASP.Net上就可以使业务逻辑和Html页面分离,这样无论页面原型如何改变。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 21:32

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表