C#泛型
时间: 2025-05-31 12:56:14 浏览: 14
### C# 泛型使用指南与示例详解
#### 1. **什么是泛型?**
泛型是一种强大的编程特性,允许开发者编写能够处理多种数据类型的代码而无需重复实现。通过引入类型参数,可以在编译时提供更强的类型安全性并优化性能[^1]。
#### 2. **基本语法与定义**
##### 定义泛型类
下面是一个简单的泛型类定义:
```csharp
using System;
namespace Fountain.Net.Base.Sample {
public class GenericClass<T> {
public T GenericField { get; set; }
/// <summary>
/// 泛型方法:带有<>和类型参数的方法
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="message"></param>
public void Message<T>(T message) {
Console.WriteLine("GenericField值={0}", GenericField);
Console.WriteLine("GenericField值类型是= {0}", GenericField?.GetType()?.FullName ?? "null");
Console.WriteLine();
Console.WriteLine("方法参数值={0}", message);
Console.WriteLine("方法参数类型是={0}", message?.GetType()?.FullName ?? "null");
}
}
}
```
此代码片段展示了一个名为 `GenericClass` 的泛型类,其中包含一个属性 `GenericField` 和一个泛型方法 `Message`[^1]。
##### 使用泛型类
在主程序中实例化并使用上述泛型类如下所示:
```csharp
using System;
namespace Fountain.Net.Base.Sample {
internal class Program {
static void Main(string[] args) {
// 实例化泛型类
GenericClass<string> generic = new GenericClass<string>();
generic.GenericField = "A string";
// 调用泛型方法
generic.Message<int>(6);
Console.ReadLine();
}
}
}
```
这段代码演示了如何创建一个指定类型的泛型类实例,并调用了其内部的一个泛型方法。
#### 3. **泛型中的运算符支持**
C# 提供了一种机制使得即使是在不知道确切的数据类型的情况下也可以执行诸如加减乘除之类的操作。这通常涉及将类型转换为动态类型 `(dynamic)` 来绕过静态类型检查:
```csharp
public class MathOperations<T> {
public T Add(T a, T b) {
return (dynamic)a + (dynamic)b;
}
public T Subtract(T a, T b) {
return (dynamic)a - (dynamic)b;
}
}
```
这种方法虽然灵活但可能带来运行期异常的风险,应谨慎使用[^2]。
#### 4. **泛型约束**
有时我们需要对可以作为类型参数传递给泛型的实际类型施加一定的限制条件。例如,如果希望确保某个类型具有默认构造函数,则可采用以下方式:
```csharp
public class MyGeneric3<T> where T : new() {
public MyGeneric3(T t) {
Console.WriteLine($"result:type={t.GetType().Name};value={t}");
}
}
```
在此处添加了 `where T : new()` 子句表明只有那些拥有公共无参构造器的类型才适合作为此处的 `T` 类型参数[^3]。
还有更多种类别的约束可用,比如限定到特定基类或者接口继承关系等等[^5]。
#### 5. **内置泛型委托**
.NET Framework 已经预先定义了一些常用的泛型委托类型来帮助简化开发工作流。主要包括但不限于以下几个类别:
- **Action**: 表达不返回任何结果的动作;
- **Func**: 返回单一结果的功能表达式;
- **Predicate**: 特殊形式 Func<bool>, 主要用于过滤逻辑判断场景下。
举个简单例子说明 Action 的用途:
```csharp
// 创建匿名方法并通过 action 委托绑定
Action<string> printString = s => Console.WriteLine(s);
printString("Hello World!");
```
以上就是关于 C# 泛型的一些基础介绍及其高级特性的讲解[^4]。
---
阅读全文
相关推荐














