C#泛型
时间: 2025-04-26 16:05:16 浏览: 39
### C# 泛型概述
C# 中的泛型是一种强大的语言特性,允许编写能够处理多种数据类型的代码。通过使用类型参数,可以创建更加通用和可重用的类、接口、方法以及委托[^4]。
#### 定义泛型类型
定义一个泛型类型时,在名称后面加上一对尖括号 `<T>` 表示这是一个接受单一类型参数 `T` 的泛型类型:
```csharp
class GenericClass<T>
{
private T data;
public GenericClass(T value)
{
this.data = value;
}
public T GetData()
{
return this.data;
}
}
```
这段代码展示了如何声明并初始化一个名为 `GenericClass` 的简单泛型类,其中包含了一个私有的字段 `data` 用来保存传入的数据,并提供了相应的构造函数与访问器方法。
#### 添加约束条件
为了使泛型更为灵活且安全,可以通过添加约束来限定能作为类型实参的具体类别。比如,如果希望某个泛型仅限于实现了特定接口的对象,则可在定义时指定此类约束:
```csharp
public class ExampleClass : IExample
{
public void ExampleMethod()
{
Console.WriteLine("Example method called.");
}
}
public class GenericClass<T> where T : IExample
{
public void CallExampleMethod(T obj)
{
obj.ExampleMethod();
}
}
```
这里展示的是带有接口约束 (`where T : IExample`) 的泛型类实例化过程及其成员调用情况[^1]。
#### 创建泛型方法
除了整个类之外,单独的方法也支持泛型化设计模式。这使得即使是在非泛型上下文中也能享受到泛型带来的便利之处:
```csharp
public static bool Compare<T>(T a, T b) where T : IComparable<T>
{
return a.CompareTo(b) > 0;
}
```
此静态方法接收两个相同类型的参数并通过实现自定义逻辑来进行比较操作;值得注意的是此处同样加入了针对 `IComparable<T>` 接口的支持以确保输入合法性[^3]。
#### 应用场景举例
考虑这样一个需求——我们需要构建一个动态数组容器,它可以容纳任何基本数值或者复杂对象而无需担心内存溢出等问题。此时就可以借助泛型的力量轻松达成目标:
```csharp
using System.Collections.Generic;
public class DynamicArray<T>
{
List<T> items = new();
public void AddItem(T item)
{
items.Add(item);
}
public IEnumerator<T> GetEnumerator()
{
foreach (var i in items)
yield return i;
}
}
```
上述例子中演示了基于 .NET Framework 提供的标准库中的集合类型 `List<T>` 构建自己的简易版动态数组的方式。
阅读全文
相关推荐


















