c#中的泛型(generic)

本文深入探讨了C#中的泛型特性,介绍了如何通过泛型让多个类型共享代码,提高代码复用性和灵活性。文章详细讲解了泛型类、结构、接口、委托和方法的使用,并解释了类型参数的约束条件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

泛型特性提供了一种更优雅的方式,可以让多个类型共享一组代码。泛型允许我们声明类型参数化的代码,可以用不同的类型进行实例化。也就是说,我们可以用“类型占位符”来写代码,然后再创建类的实例时知名真实的类型。
c#提供了5种泛型:类、结构、接口、委托、方法。

类型参数的约束

约束使用where子句列出。

  • 每一个有约束的类型参数有自己的where子句。
  • 如果形参有多个约束,它们再where子句种使用逗号分隔。
    chass MyClass <T1,T2,T3> where T2:Customer where T3:IComparable {}

泛型方法

public void PrintData<S,T> (S p,T t) where S:Person {}

### C# 类的命名规范与最佳实践 在C#中,类的命名需要遵循一定的规范和最佳实践,以确保代码的可读性、一致性和维护性。以下是关于类命名的一些关键点: #### 1. 参数的命名规则 参数通常使用单个大写字母来表示,这种约定来源于数学中的集合符号表示法。常见的参数命名包括 `T`、`U`、`V` 等[^1]。 - 如果参数只有一个,通常命名为 `T`(Type 的缩写)。 - 如果有多个参数,则可以依次命名为 `T`, `U`, `V` 等。 - 在某些情况下,为了增强语义清晰度,可以在字母后添加描述性的后缀。例如: - `TKey` 和 `TValue`:用于键值对类参数。 - `TSource` 和 `TResult`:用于表示源数据类和结果数据类参数。 #### 2. 类的命名规则 类的命名应尽量清晰地反映其用途,并避免歧义。以下是一些命名的最佳实践: - **清晰的类名**:类名应能够准确描述类的功能或用途。例如,`Dictionary<TKey, TValue>` 明确表示这是一个键值对集合。 - **避免过度化**:尽管类本身是通用的,但类名仍需具体到一定程度,以便开发者理解其用途。 - **遵循语言习惯**:C# 中的类通常采用 PascalCase 命名法,且不包含任何特殊字符或下划线[^3]。 #### 3. 示例代码 以下是一个符合命名规范的类示例: ```csharp using System; using System.Collections.Generic; public class ObjectPool<T> where T : new() { private readonly Queue<T> pool = new Queue<T>(); private readonly object lockObject = new object(); public T GetObject() { lock (lockObject) { if (pool.Count > 0) { return pool.Dequeue(); } else { return new T(); } } } public void ReturnObject(T item) { lock (lockObject) { pool.Enqueue(item); } } } ``` 在此示例中,参数被命名为 `T`,符合单字母命名的习惯,同时类名 `ObjectPool<T>` 清晰表达了该类的用途。 #### 4. 注意事项 - **避免歧义**:如果参数的意义不明确,应在文档中详细说明每个参数的用途。 - **约束条件**:当为参数添加约束时,应确保约束条件的命名与其逻辑一致。例如,`where T : IComparable` 表示 `T` 必须实现 `IComparable` 接口[^1]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值