早闻.NET 2.0中泛型的大名,但一直未在实际开发中使用。 
   
   
  应用场景:
   在配置文件中通过反序列化读取相应的邮件设置。
  配置文件示例:
  
  
  <BlogConfigurationSettings>
  <MailSettings>
   <MailSetting Name="ApproveEmail" SmtpServer="smtp.126.com" EmailFrom="" UserName="" PassWord=""></MailSetting>
   <MailSetting Name="ContactEmail" SmtpServer="smtp.163.com" EmailFrom="" UserName="" PassWord=""></MailSetting>
  </MailSettings>
  </BlogConfigurationSettings>
  功能说明:
   通过该配置文件,反序列化得到BlogConfigurationSettings实例的属性MailSettings,然后根据关键字得到相应的MailSetting,比如:名为ApproveEmail的MailSetting。
  
  MailSetting的定义:
   MailSetting
   [Serializable]
   public class MailSetting
   {
   private string _name;
   [XmlAttribute("Name")]
   public string Name
   {
   get { return _name; }
   set { _name = value; }
   }
  
   private string _smtpServer;
   [XmlAttribute("SmtpServer")]
   public string SmtpServer
   {
   get { return _smtpServer; }
   set { _smtpServer = value; }
   }
  
   private string _mailFrom;
   [XmlAttribute("MailFrom")]
   public string MailFrom
   {
   get { return _mailFrom; }
   set { _mailFrom = value; }
   }
  
   private string _username;
   [XmlAttribute("UserName")]
   public string UserName
   {
   get { return _username; }
   set { _username = value; }
   }
  
   private string _password;
   [XmlAttribute("Password")]
   public string Password
   {
   get { return _password; }
   set { _password = value; }
   }
  
   public string Key
   {
   get { return this.Name; }
   }
  
   }
  如果不使用泛型,我们可以通过数组或者集合类来实现。
  对于数组,我们需要在BlogConfigurationSettings进行这样的定义:
  private MailSetting [] __mailSettings;
  [XmlArray("MailSettings")]
  public MailSetting [] MailSettings
   {
   get { return this._mailSettings; }
   set { this._mailSettings = value; }
   }我们还需要写一个方法去枚举数组元素,根据关键字返回相应的MailSetting。
  
  对于集合类,需要在BlogConfigurationSettings进行这样的定义:
  private MailSettingColletion _mailSettings;
  [XmlArray("MailSettings")]
  public MailSettingColletion MailSettings
   {
   get { return this._mailSettings; }
   set { this._mailSettings = value; }
   }我们需要写一个MailSettingColletion类, 并且在MailSettingColletion中实现一个方法去根据关键字查找相应的MailSetting。
  
  对于泛型,我们只要在BlogConfigurationSettings进行如下的定义:
  private List<MailSetting> _mailSettings;
  [XmlArray("MailSettings")]
  public List<MailSetting> MailSettings
   {
   get { return _mailSettings; }
   set { _mailSettings = value;}
   }
  然后只需下面的一行代码就能根据关键字得到相应的MailSetting:
  BlogConfigurationSettings.MailSettings.Find(delegate(MailSetting mailSetting) { return mailSetting.Key == "ApproveEmail"; })
  Find方法的参数类型是Predicate<T>,它的定义是:
  public delegate bool Predicate<T>(T obj)
  也就是一个参数为泛型,返回值为bool的委托类型。
  Find的功能就是枚举List<T>中的元素,并以每个元素作为委托的参数调用委托,实际的委托方法是通过Find参数传递过来的,当调用的委托返回true时,返回当前元素。
  
  你也可以将上面的Find参数中的代码写为一个单独的方法,然后将方法名作为Find的参数。
  BlogConfigurationSettings.MailSettings.Find(IsMe);
  public bool IsMe(MailSetting mailSetting)
   {
   return mailSetting.Key == "ApproveEmail";
  }
  对于这样的代码,你立即会感到不舒服,这样岂不要为每个关键字写一个方法,你想应该这样写:
  public bool IsMe(MailSetting mailSetting,string key)
   {
   return mailSetting.Key == key;
  }
  这样写当然好啊,可是Find却不同意,它的参数只允许是带有一个参数的方法。
  那如何解决这个问题呢?
  我想到的一个解决方法,写一个MailSettingPredicate类:
  public class MailSettingPredicate
   {
   private string key;
  
   public string Key
   {
   get { return key; }
   set { key = value; }
   }
  
   public bool IsMe(MailSetting mailSetting)
   {
   return mailSetting.Key == this.key;
   }
   }
  在调用IsMe之前,先设置MailSettingManager.Key的值,代码如下:
  MailSettingPredicate predicate= new MailSettingPredicate();
  predicate.Key = "ApproveEmail";
  Config.Settings.MailSettings.Find(predicate.IsMe);
  predicate.Key = "ContactEmail";
  Config.Settings.MailSettings.Find(predicate.IsMe);
   我在实际开发中刚刚使用.NET 2.0的泛型,写这篇文章是想加深自己的理解,同时希望给不熟悉.NET 2.0泛型的朋友提供一点参考,不足之处,欢迎您指出。

转载于:https://www.cnblogs.com/hq2008/archive/2007/12/24/1012529.html

asp.net 2.0相关推荐

  1. ASP.NET 4.0: 请求验证模式变化导致ValidateRequest=false失效

    ASP.NET请求验证功能可以给我提供应用程序的安全保证,避免站点受到XSS的攻击.但是在一些情况下,我们需要禁用这个功能,比如我们需要使用HtmlEditor来让用户输入一些HTML文本,这时候AS ...

  2. [导入]Learning.ASP.NET 2.0.with.AJAX.pdf(14.14 MB)

    ASP.NET 2.0的AJAX无疑是最快,最有效,最可靠和最佳的方式支持创建交互式Web应用程序上市.结合开发工具,可以从Microsoft ,免费和商业,这是 难以置信轻松地创建网站,看看伟大的表 ...

  3. ASP.NET 2.0 绑定高级技巧

    1.简单数据绑定定 <!--ASP.NET 1.x data binding expression --> <%# DataBinder.Eval(Container.DataIte ...

  4. ASP.Net 2.0 发送邮件的代码

    这两天因为要做一个可以收集用户提交信息,然后发送邮件到指定邮箱的网页.在 asp.net 2.0 里面发送邮件可以使用 System.Net.Mail 下面的类.http://www.systemne ...

  5. 在ASP.NET 2.0中使用样式、主题和皮肤

    ASP.NET 2.0的主题和皮肤特性使你能够把样式和布局信息存放到一组独立的文件中,总称为主题(Theme).接下来我们可以把这个主题应用到任何站点,用于改变该站点内的页面和控件的外观和感觉.通过改 ...

  6. asp.net 2.0中设定默认焦点按钮

    在asp.net 1.1中,当要在page_load页面中,设置某个控件为默认的焦点按钮(也就是默认焦点是在这个控件上的),可能要用到javascript的代码,而在ASP.NET 2.0中,不用这些 ...

  7. asp.net 2.0中的弹出对话框

    在asp.net 1.1中,要做1个弹出的对话框的话,一般是在服务端的代码中这样写: btnClick.Attributes.Add("onclick", "return ...

  8. ASP.NET 2.0 AJAX中Webservice调用方法示例

    ASP.NET 2.0 AJAX中能够在客户端js中很方便地调用服务器Webservice,以下为一些调用的示例.笔者安装的ASP.NET 2.0 AJAX 版本为AJAX November CTP. ...

  9. ASP.net 2.0下应用程序离线信息

    ASP.net 2.0 有一个新特性,就是支持应用程序离线信息. 什么是离线信息呢?以前我们在更新应用程序,导至asp.net应用程序重启,应用程序的用户通常会显示不友好的错误信息,或者IE一直显示加 ...

  10. 在ASP.NET 2.0中建立站点导航层次

    站点导航提供程序--ASP.NET 2.0中的站点导航提供程序暴露了应用程序中的页面的导航信息,它允许你单独地定义站点的结构,而不用考虑页面的实际物理布局.默认的站点导航提供程序是基于XML的,但是你 ...

最新文章

  1. OpenCV后投影,利用阈值函数分割指定区域生成掩膜,通过直方图分布查找其他图像相同区域。
  2. Spring Webflux: Kotlin DSL [片断]
  3. 课堂测试-找英语单词最长链
  4. 人工智障学习笔记——强化学习(5)DRL与DQN
  5. 在Spring项目中集成使用MongoDB
  6. 【英语学习】【WOTD】sentient 释义/词源/示例
  7. docker 网络_初探Docker的网络模式
  8. Nokia Lumia(WP7.5) 新手入门的摸索
  9. 数学建模-14.主成分分析PCA
  10. config配置文件
  11. android horizontalscrollview顶部导航,带有居中效果的HorizontalScrollView使用说明
  12. logback springProperty 标签不起作用
  13. ip地址与交换机工作原理
  14. 又dota了......
  15. C#应用案例之打字母游戏
  16. MySQL(查询语句,关键字)
  17. 重磅 !微软官方出了免费 Python 视频教程
  18. SSL peer shut down incorrectly 问题处理方法
  19. VS 2017 OCX
  20. C#读写NFC系列Ntag2x芯片源码

热门文章

  1. eclipse里source的快捷方法_教你如何在Linux中设置快捷方式图标
  2. 计算机科学技术基础c,计算机科学技术基础.ppt
  3. oracle rman 20207,RMAN-20207: UNTIL TIME or RECOVERY WINDOW is before RESETLOGS time
  4. STM32F103DAC功能实现
  5. NYOJ-01串(dp)
  6. python+opencv+PIL,在图片和视频中写入中文(汉字)
  7. Logistic Regression(逻辑回归)模型实现二分类和多分类
  8. failed to read artifact descriptor for xx
  9. VS2005 Extjs智能提示插件
  10. asp.net core 系列 20 EF基于数据模型创建数据库