C# 2.0 泛型编程基础教程

5星 · 超过95%的资源 需积分: 9 1 下载量 42 浏览量 更新于2024-09-15 收藏 9KB TXT 举报
"C#2.0中泛型编程初级入门教程" C# 2.0 引入了泛型编程,极大地增强了代码的复用性和类型安全性。泛型允许开发者在不指定具体类型的情况下定义类、接口和方法,从而创建可应用于多种数据类型的通用代码模板。这种技术类似于 C++ 的模板,但更安全且易于使用。 在 C# 1.x 版本中,如果需要创建一个可以处理不同类型的数据结构,如堆栈或队列,通常需要为每种可能的数据类型创建一个独立的类。例如,要创建一个仅处理整数的堆栈,会定义一个 `Stack<int>` 类,如果还要处理字符串,就需要再创建一个 `Stack<string>` 类。这不仅增加了代码量,而且在类型转换过程中可能会出现运行时错误。 在 C# 2.0 中,引入泛型后,可以定义一个通用的 `Stack<T>` 类,其中 `T` 是一个占位符,代表任何引用类型或值类型。这样,我们可以在创建堆栈时指定 `T` 的实际类型,例如 `Stack<int>` 或 `Stack<string>`。这样做的好处是: 1. **类型安全性**:编译器在编译期间就能检查类型匹配,避免了运行时类型转换错误。 2. **性能优化**:泛型类实例化时,类型参数 `T` 被替换为实际类型,避免了装箱和拆箱操作,提高了执行效率。 3. **代码重用**:一个泛型实现可以服务于多个数据类型,减少了代码重复。 以下是一个简单的泛型堆栈类 `Stack<T>` 的实现: ```csharp public class Stack<T> { private T[] m_item; public T Pop() { // 实现 Pop 方法 } public void Push(T item) { // 实现 Push 方法 } public Stack(int i) { this.m_item = new T[i]; } } ``` 在这个泛型堆栈类中,`T` 是一个类型参数,它将被实际使用的类型所替代。`Pop` 方法返回 `T` 类型的元素,`Push` 方法接受一个 `T` 类型的参数,并将其添加到堆栈。这样,无论 `T` 是 `int`、`string` 还是自定义类型,这个类都能正确工作。 创建泛型实例时,类型参数需要在类名后面用尖括号 `< >` 括起来,例如: ```csharp Stack<int> intStack = new Stack<int>(100); // 创建一个整数堆栈 intStack.Push(10); intStack.Push(20); Stack<string> stringStack = new Stack<string>(10); // 创建一个字符串堆栈 stringStack.Push("Hello"); stringStack.Push("World"); ``` 需要注意的是,当尝试将不同类型的对象压入堆栈时,编译器会报错,因为类型不匹配。在上面的例子中,如果试图将一个 `Node1` 对象推入一个 `Stack<Node2>`,将会出现编译错误,确保了类型的一致性。 C# 2.0 的泛型编程使得开发人员能够编写更加灵活、高效且安全的代码,减少冗余,提高代码质量。通过掌握泛型,开发者可以构建出强大的工具和框架,适应各种复杂的应用场景。