ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# 泛型介绍(C# 编程指南) 泛型类和泛型方法同时具备可重用性、类型安全和效率,这是非泛型类和非泛型方法无法具备的。泛型通常用与集合以及作用于集合的方法一起使用。.NET Framework 2.0 版类库提供一个新的命名空间 [System.Collections.Generic](https://msdn.microsoft.com/zh-cn/library/system.collections.generic.aspx),其中包含几个新的基于泛型的集合类。建议面向 .NET Framework 2.0 及更高版本的所有应用程序都使用新的泛型集合类,而不要使用旧的非泛型集合类如 [ArrayList](https://msdn.microsoft.com/zh-cn/library/system.collections.arraylist.aspx)。有关更多信息,请参见 [.NET Framework 类库中的泛型(C# 编程指南)](https://msdn.microsoft.com/zh-cn/library/ac30fak4.aspx)。 当然,也可以创建自定义泛型类型和方法,以提供自己的通用解决方案,设计类型安全的高效模式。下面的代码示例演示一个用于演示用途的简单泛型链接列表类。(大多数情况下,应使用 .NET Framework 类库提供的 [List&lt;T&gt;](https://msdn.microsoft.com/zh-cn/library/6sh2ey19.aspx) 类,而不是自行创建类。)在通常使用具体类型来指示列表中存储的项的类型的场合,可使用类型参数 _T_。其使用方法如下: * 在 **AddHead** 方法中作为方法参数的类型。 * 在 **Node** 嵌套类中作为公共方法 **GetNext** 和 **Data** 属性的返回类型。 * 在嵌套类中作为私有成员数据的类型。 注意,T 可用于 **Node** 嵌套类。如果使用具体类型实例化 GenericList&lt;T&gt;(例如,作为 GenericList&lt;int&gt;),则所有的 T 都将被替换为 _int_。 ``` // type parameter T in angle brackets public class GenericList<T> { // The nested class is also generic on T. private class Node { // T used in non-generic constructor. public Node(T t) { next = null; data = t; } private Node next; public Node Next { get { return next; } set { next = value; } } // T as private member data type. private T data; // T as return type of property. public T Data { get { return data; } set { data = value; } } } private Node head; // constructor public GenericList() { head = null; } // T as method parameter type: public void AddHead(T t) { Node n = new Node(t); n.Next = head; head = n; } public IEnumerator<T> GetEnumerator() { Node current = head; while (current != null) { yield return current.Data; current = current.Next; } } } ``` 下面的代码示例演示客户端代码如何使用泛型 GenericList&lt;T&gt; 类来创建整数列表。只需更改类型参数,即可方便地修改下面的代码示例,创建字符串或任何其他自定义类型的列表: ``` class TestGenericList { static void Main() { // int is the type argument GenericList<int> list = new GenericList<int>(); for (int x = 0; x < 10; x++) { list.AddHead(x); } foreach (int i in list) { System.Console.Write(i + " "); } System.Console.WriteLine("\nDone"); } } ``` ## 请参阅 [System.Collections.Generic](https://msdn.microsoft.com/zh-cn/library/system.collections.generic.aspx) [C# 编程指南](https://msdn.microsoft.com/zh-cn/library/67ef8sbd.aspx) [泛型(C# 编程指南)](https://msdn.microsoft.com/zh-cn/library/512aeb7t.aspx)