2024-02-05 · C# 基础 · 学习笔记

泛型 Generics 入门理解

泛型 Generics 是 C# 最重要的特性之一。它让你写一套代码能处理多种类型,同时保持类型安全,避免装箱拆箱的性能开销。没有泛型之前用 ArrayList 存任何类型都是 object,存取时要强制转换。

where 约束是泛型里稍难理解的部分:where T : struct 表示 T 必须是值类型;where T : class 表示引用类型;where T : new() 表示必须有无参构造函数;where T : IComparable 表示必须实现某个接口。多个约束用逗号隔开。

实践体会:泛型方法比重载灵活,但不要为了泛型而泛型。如果一个方法只处理一种类型,就不要加泛型参数。集合类(List<T>、Dictionary)是最常见的泛型应用。

代码示例

// 泛型方法:写一次,多种类型可用
public T Max<T>(T a, T b) where T : IComparable<T>
{
    return a.CompareTo(b) > 0 ? a : b;
}

// 调用
int m1 = Max(3, 5);        // 5
double m2 = Max(1.5, 2.8); // 2.8

// 泛型类
public class Repository<T>
{
    private List<T> _items = new();
    public void Add(T item) => _items.Add(item);
    public T? Get(int index) => _items[index];
}

var repo = new Repository<string>();
repo.Add("hello");
学习小结:以上是我学习这个知识点时的笔记和心得。技术学习没有捷径,多写多练多踩坑,自然就掌握了。如果这篇笔记对你有帮助,欢迎继续看看其他文章。