C#泛型全知识点总结

张开发
2026/4/13 12:11:48 15 分钟阅读

分享文章

C#泛型全知识点总结
一泛型是什么允许在定义类、接口、方法、委托时不指定具体类型用类型参数T代替真正使用时再传入具体类型如int、string、自定义类核心作用类型安全、代码复用、避免装箱拆箱、提高性能泛型 能通用支持所有类型但用的时候必须明确指定类型定义是写代码阶段不算使用用模板造东西才算真正使用二泛型有什么用你要存一组数据但不想固定死类型object必须统一成引用类型 → 必须装箱拆箱泛型直接用真实类型 → 是什么类型就存什么类型不用泛型 → 用object→ 频繁装箱拆箱性能差。用泛型 → 直接用真实类型 → 性能高、类型安全。值类型 → 塞进 object → 变成引用类型存储用的时候 → 必须从引用类型 → 强制转回值类型这两个动作就是装箱Boxing值类型 → 引用类型拆箱Unboxing引用类型 → 值类型三泛型声明与使用1.泛型类// 泛型类 public class GenericListT { public void Add(T item) { ... } }2.泛型接口public interface IRepositoryT { T GetById(int id); }3.泛型结构public struct PointT { public T X; public T Y; }4.泛型方法可以存在于任何类中普通类泛型类都可以也可以写在类外面public void SwapT(ref T lhs, ref T rhs) { T temp lhs; lhs rhs; rhs temp; }四泛型约束约束决定了泛型参数T“能干什么”。如果没有约束T只能调用object的方法。约束说明where T : structT必须是值类型不包括 Nullable。where T : classT必须是引用类型。where T : notnullT必须是非可空类型C# 8.0。where T : new()T必须具有公共无参构造函数必须放在最后。where T : BaseClassT必须是指定的基类或其派生类。where T : InterfaceT必须实现指定的接口。where T : UT必须是另一个泛型参数U或其派生类。五协变与逆变这是泛型中最容易绕晕的部分主要针对接口和委托。协变 (out)让子类可以当父类用用于返回值。IEnumerablestring可以赋值给IEnumerableobject。关键字out。逆变 (in)让父类可以当子类用用于方法参数。Actionobject可以赋值给Actionstring。关键字in。六Default关键字在泛型中你不知道T是引用类型默认null还是值类型默认0。 使用default(T)可以获取该类型的默认值。T value default(T); // C# 7.1 后可简写为 default

更多文章