C#泛型应用及优点浅析

上传人:206****923 文档编号:41489486 上传时间:2018-05-29 格式:DOC 页数:6 大小:49KB
返回 下载 相关 举报
C#泛型应用及优点浅析_第1页
第1页 / 共6页
C#泛型应用及优点浅析_第2页
第2页 / 共6页
C#泛型应用及优点浅析_第3页
第3页 / 共6页
C#泛型应用及优点浅析_第4页
第4页 / 共6页
C#泛型应用及优点浅析_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《C#泛型应用及优点浅析》由会员分享,可在线阅读,更多相关《C#泛型应用及优点浅析(6页珍藏版)》请在金锄头文库上搜索。

1、1C#C# 泛型应用及优点浅析泛型应用及优点浅析C# 泛型应用的好处是什么呢?.NET 中的泛型使您可以重用代码以及在实现它时付出的努力。类型和内部数据可以在不导致代码膨胀的情况下更改,而不管您使用的是值类型还是引用类型。您可以一次性地开发、测试和部署代码,通过任何类型(包括将来的类型)来重用它,并且全部具有编译器支持和类型安全。因为一般代码不会强行对值类型进行装箱和取消装箱,或者对引用类型进行向下强制类型转换,所以性能得到显著提高。对于值类型,性能通常会提高 200%;对于引用类型,在访问该类型时,可以预期性能最多提高 100%(当然,整个应用程序的性能可能会提高,也可能不会提高)。本文随附

2、的源代码包含一个微型基准应用程序,它在紧密循环中执行堆栈。该应用程序使您可以在基于 Object 的堆栈和一般堆栈上试验值类型和引用类型,以及更改循环迭代的次数以查看泛型对性能产生的影响。C# 泛型泛型应应用分析用分析因为 IL 和 CLR 为泛型提供本机支持,所以大多数符合 CLR 的语言都可以利用一般类型。例如,下面这段 Visual Basic .NET 代码使用代码块 2 的一般堆栈:1.Dim stack As Stack(Of Integer) 2.stack = new Stack(Of Integer) 3.stack.Push(3) 4.Dim number As Integ

3、er 5.number = stack.Pop() 您可以在类和结构中使用泛型。以下是一个有用的一般点结构:26.public struct Point 7. 8. public T X; 9. public T Y; 10. 可以使用该一般点来表示整数坐标,例如:11. Point point; 12. point.X = 1; 13. point.Y = 2; 或者,可以使用它来表示要求浮点精度的图表坐标:14. Point point; 15. point.X = 1.2; 16. point.Y = 3.4; 除了到目前为止介绍的基本泛型语法以外,C# 2.0 还具有一些泛型特定的语法

4、。例如,请考虑代码块 2 的 Pop() 方法。假设您不希望在堆栈为空时引发异常,而是希望返回堆栈中存储的类型的默认值。如果您使用基于 Object 的堆栈,则可以简单地返回 null,但是您还可以通过值类型来使用一般堆栈。为了解决该问题,您可以使用 default() 运算符,它返回类型的默认值。下面说明如何在 Pop() 方法的实现中使用默认值:17. public T Pop() 18. 19. m_StackPointer-; 20. if(m_StackPointer = 0) 21. 22. return m_Itemsm_StackPointer; 23. 24. else 25

5、. 326. m_StackPointer = 0; 27. return default(T); 28. 29. 引用类型的默认值为 null,而值类型(例如,整型、枚举和结构)的默认值为全零(用零填充相应的结构)。因此,如果堆栈是用字符串构建的,则 Pop() 方法在堆栈为空时返回 null;如果堆栈是用整数构建的,则 Pop() 方法在堆栈为空时返回零。C# 泛型泛型应应用之多个一般用之多个一般类类型型单个类型可以定义多个一般类型参数。例如,请考虑代码块 3 中显示的一般链表。C# 泛型泛型应应用代用代码块码块之一般之一般链链表表30. class Node 31. 32. public

6、 K Key; 33. public T Item; 34. public Node NextNode; 35. public Node() 36. 37. Key = default(K); 38. Item = defualt(T); 39. NextNode = null; 40. 41. public Node(K key,T item,Node nextNode) 42. 43. Key = key; 44. Item = item; 45. NextNode = nextNode; 46. 47. 448. public class LinkedList 49. 50. Node

7、m_Head; 51. public LinkedList() 52. 53. m_Head = new Node(); 54. 55. public void AddHead(K key,T item) 56. 57. Node newNode = new Node(key,item,m_Head.Next Node); 58. m_Head.NextNode = newNode; 59. 60. 该链表存储节点:61. class Node 62. . 每个节点都包含一个键(属于一般类型参数 K)和一个值(属于一般类型参数 T)。每个节点还具有对该列表中下一个节点的引用。链表本身根据一般类

8、型参数 K 和 T 进行定义:63. public class LinkedList 64. . 这使该列表可以公开像 AddHead() 一样的一般方法:65. public void AddHead(K key,T item); 每当您声明使用泛型的类型的变量时,都必须指定要使用的类型。但是,指定的类型实参本身可以为一般类型参数。例如,该链表具有一个名为 m_Head 的 Node 类型的成员变量,用于引用该列表中的5第一个项。m_Head 是使用该列表自己的一般类型参数 K 和 T 声明的。66. Node m_Head; 您需要在实例化节点时提供类型实参;同样,您可以使用该链表自己的一

9、般类型参数:67. public void AddHead(K key,T item) 68. 69. Node newNode = new Node(key,item,m_Head.NextN ode); 70. m_Head.NextNode = newNode; 71. 请注意,该列表使用与节点相同的名称来表示一般类型参数完全是为了提高可读性;它也可以使用其他名称,例如:72. public class LinkedList 73. . 或:74. public class LinkedList 75. . 在这种情况下,将 m_Head 声明为:76. Node m_Head; 当客户

10、端使用该链表时,该客户端必须提供类型实参。该客户端可以选择整数作为键,并且选择字符串作为数据项:77. LinkedList list = new LinkedList(); 78. list.AddHead(123,“AAA“); 6但是,该客户端可以选择其他任何组合(例如,时间戳)来表示键:79. LinkedList list = new LinkedList(); 80. list.AddHead(DateTime.Now,“AAA“); 有时,为特定类型的特殊组合起别名是有用的。可以通过 using 语句完成该操作,如代码块 4 中所示。请注意,别名的作用范围是文件的作用范围,因此您必须按照与使用 using 命名空间相同的方式,在项目文件中反复起别名。C# 泛型泛型应应用代用代码块码块之之 一般一般类类型型别别名名81. using List = LinkedList; 82. class ListClient 83. 84. static void Main(string args) 85. 86. List list = new List(); 87. list.AddHead(123,“AAA“); 88. 89. C# 泛型应用及 C# 泛型应用的优点就向你介绍到这里,希望对你了解和学习 C# 泛型应用有所帮助。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号