ASP.NET 2.0泛型详解
创始人
2024-04-22 20:20:26
0

C#2.0作为#1.X的升级版本,为我们引入了很多新的而且很实用的特性。最重要的当属ASP.NET 2.0泛型(Generics)、匿名方法(Anonymous Methods)、迭代器(Iterators)和局部类(partial Types)。这些新特性在提供高度兼容性的同时,也在很大程度上提高了代码的效率和安全性。

本节我们学习有关于ASP.NET 2.0泛型的内容。泛型存在的必要性:在1.X版本中,为了能适应不同类型的参数引入,我们常常需要重写一些函数,或者常常将其object化,以达到函数的通用性。但往往带给我们的是程序性能的下降和重复性劳动的增加。泛型的出现很好的解决了这个问题。其实简单的讲,泛型是一种可以传递或者灵活规范参数类型的机制。
泛型需要命名空间System.Collections.Generic的支持,可应用于类、方法、结构、接口、委托等设计中,集复用性、类型安全、高效率于一身。下面我们分别举例来看看泛型的几种使用方法。

1、ASP.NET 2.0泛型方法

  1. using System;  
  2. using System.Collections.Generic;   
  3.  
  4. public class GenericMethod  
  5. {  
  6. // 静态 泛型方法  
  7. public static string Output〈T 〉(T t)  
  8. {  
  9. return "类型:" + t.GetType().  
  10. ToString() + ";值:" + t.ToString();  
  11. }  
  12. }   
  13.  
  14. public partial class Generic_Method :   
  15. System.Web.UI.Page  
  16. {  
  17. protected void Page_Load(object   
  18. sender, EventArgs e)  
  19. {  
  20. Response.Write(GenericMethod.Output 
  21. 〈int 〉 (23) + "〈br / 〉 ");  
  22.  
  23. Response.Write(GenericMethod.Output 
  24. 〈DateTime 〉 (DateTime.Now) + "〈br / 〉 ");  
  25. }  
  26. }   

2、ASP.NET 2.0泛型抽象类

  1. using System;  
  2. using System.Collections.Generic;  
  3.  
  4. // 泛型抽象类  
  5. public abstract class GenericParent  
  6. {  
  7. // 泛型抽象方法,返回值为一个泛型,  
  8. 加一个约束使泛型X要继承自泛型Y  
  9. public abstract X Output〈 X, Y 〉   
  10. (X x, Y y) where X : Y;   
  11.  
  12. // 泛型抽象方法,返回值为一个string类型,  
  13. 加一个约束使泛型X要继承自IListSource  
  14. public abstract string Output2〈 X 〉   
  15. (X x) where X : System.ComponentModel.  
  16. IListSource;  
  17. }   
  18.  
  19. public class GenericChild : GenericParent  
  20. {  
  21. // 重写抽象类的泛型方法  
  22. public override T Output〈 T, Z 〉 (T t, Z z)  
  23. {  
  24. return t;  
  25. }    
  26.  
  27. // 重写抽象类的泛型方法  
  28. public override string Output2〈 T 〉 (T t)  
  29. {  
  30. return t.GetType().ToString();  
  31. }  
  32. }   
  33.  
  34. public partial class Generic_Abstract :  
  35.  System.Web.UI.Page  
  36. {  
  37. protected void Page_Load(object sender,   
  38. EventArgs e)  
  39. {  
  40. GenericChild gc = new GenericChild();  
  41. Response.Write(gc.Output〈 string, IComparable 〉   
  42. ("aaa", "xxx"));  
  43. Response.Write("〈 br / 〉 ");   
  44.  
  45. Response.Write(gc.Output2〈 System.Data.DataTable 〉   
  46. (new System.Data.DataTable()));  
  47. Response.Write("〈 br / 〉 ");  
  48. }  
  49. }   

#p#

3、ASP.NET 2.0泛型接口

  1. using System;  
  2. using System.Collections.Generic;   
  3.  
  4. // 泛型接口  
  5. public interface IGenericInterface〈T 〉  
  6. {  
  7. T CreateInstance();  
  8. }   
  9.  
  10. // 实现上面泛型接口的泛型类  
  11. // 派生约束where T : TI(T要继承自TI)  
  12. // 构造函数约束where T : new()(T可以实例化)  
  13. public class Factory〈T, TI 〉 :   
  14. IGenericInterface〈TI 〉  
  15. where T : TI, new()  
  16. {  
  17. public TI CreateInstance()  
  18. {  
  19. return new T();  
  20. }  
  21. }   
  22.  
  23. public partial class Generic_Interface :   
  24. System.Web.UI.Page  
  25. {  
  26. protected void Page_Load(object sender,   
  27. EventArgs e)  
  28. {  
  29. IGenericInterface〈System.ComponentModel.  
  30. IListSource 〉factory =  
  31. new Factory〈System.Data.DataTable,   
  32. System.ComponentModel.IListSource 〉();   
  33.  
  34. Response.Write(factory.CreateInstance().  
  35. GetType().ToString());  
  36. Response.Write("〈br / 〉");  
  37. }  
  38. }   

4、ASP.NET 2.0泛型委托

  1. using System;  
  2. using System.Collections.Generic;   
  3.  
  4. public class GenericDelegate  
  5. {  
  6. // 声明一个泛型委托  
  7. public delegate string OutputDelegate  
  8. 〈T 〉(T t);   
  9.  
  10. // 定义一个静态方法  
  11. public static string DelegateFun  
  12. (string s)  
  13. {  
  14. return String.Format("Hello, {0}", s);  
  15. }   
  16.  
  17. // 定义一个静态方法  
  18. public static string DelegateFun  
  19. (DateTime dt)  
  20. {  
  21. return String.Format("Time, {0}",   
  22. dt.ToString());  
  23. }  
  24. }   
  25.  
  26.  
  27. public partial class Generic_Delegate :   
  28. System.Web.UI.Page  
  29. {  
  30. protected void Page_Load(object sender,  
  31. EventArgs e)  
  32. {  
  33. // 使用泛型委托  
  34. GenericDelegate.OutputDelegate〈string 〉   
  35. delegate1  
  36. = new GenericDelegate.OutputDelegate  
  37. 〈string 〉(GenericDelegate.DelegateFun);   
  38.  
  39. Response.Write(delegate1("aabbcc"));  
  40. Response.Write("〈br / 〉");   
  41.  
  42. // 使用泛型委托(匿名方法)  
  43. GenericDelegate.OutputDelegate〈DateTime 〉  
  44. delegate2 = GenericDelegate.DelegateFun;  
  45. Response.Write(delegate2(DateTime.Now));  
  46. }  
  47. }   

【编辑推荐】

  1. ASP.NET电子商务系统设计浅析(1)
  2. 基于ASP.NET图书电子商务网站建设技术探析
  3. ASP.NET用Post方式向网页发送数据
  4. ASP.NET 2.0部署WEB应用程序浅析
  5. ASP.NET中的HttpWorkerRequest对像
  6. 介绍ASP.NET MVC框架

    相关内容

    热门资讯

    如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
    如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
    施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
    Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
    20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
    德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
    着眼MAC地址,解救无法享受D... 在安装了DHCP服务器的局域网环境中,每一台工作站在上网之前,都要先从DHCP服务器那里享受到地址动...
    为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...