c#泛型
时间: 2023-07-08 14:19:46 浏览: 169
C#中的泛型是一种通用编程技术,它允许在编写代码时使用参数化类型,从而使得代码更加灵活和可重用。使用泛型可以避免代码中的类型转换,提高代码的安全性和性能。
在C#中,泛型可以用于类、结构体、接口、方法等,通过在定义时使用类型参数来实现通用化。例如,下面是一个使用泛型的类的示例:
```
public class Stack<T>
{
private T[] items;
private int top;
public Stack()
{
items = new T[100];
top = -1;
}
public void Push(T item)
{
items[++top] = item;
}
public T Pop()
{
return items[top--];
}
}
```
在这个示例中,Stack类使用了类型参数T,即栈中存储的元素类型是由使用者在实例化时指定的。这样,我们就可以使用这个通用的Stack类来存储任何类型的数据,而不需要为每种类型都写一个专门的栈类。
使用泛型可以使代码更加简洁、通用和可读,也可以提高代码的可维护性和可重用性。
相关问题
C#泛型
### 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>` 构建自己的简易版动态数组的方式。
c#泛型方法返回值泛型
在C#中,我们可以使用泛型方法来返回泛型值。下面是一个示例:
```csharp
public T GetGenericValue<T>(T value)
{
return value;
}
// 使用示例
string stringValue = GetGenericValue("Hello");
int intValue = GetGenericValue(10);
Console.WriteLine(stringValue); // 输出:Hello
Console.WriteLine(intValue); // 输出:10
```
在上面的示例中,`GetGenericValue` 方法是一个泛型方法,它接受一个泛型参数 `T` 和一个参数 `value`。方法体中的 `return value` 语句返回了传入的泛型值。通过根据传入的值自动推断类型,可以将不同类型的值传递给该方法,并返回相应类型的值。
阅读全文
相关推荐










