泛型是C#中提升代码复用性、类型安全性和性能的重要机制,支持泛型类、泛型方法、约束(where)、泛型委托及常用泛型类型。

泛型是 C# 中提升代码复用性、类型安全性和性能的重要机制。它让你写一次逻辑,适配多种类型,避免装箱/拆箱,也省去强制类型转换的麻烦。
泛型类:用 T 占位,运行时确定真实类型
泛型类在定义时用类型参数(如 T)代替具体类型,实例化时再指定实际类型。
基本语法:
class Stack
{
private List _items = new();
public void Push(T item) => _items.Add(item);
public T Pop()
{
if (_items.Count == 0) throw new InvalidOperationException();
var last = _items[^1];
_items.RemoveAt(_items.Count – 1);
return last;
}
}
使用方式:
var intStack = new Stack(); intStack.Push(42);var strStack = new Stack(); strStack.Push("hello");
注意:同一个泛型类的不同类型实参(如 Stack 和 Stack)在运行时是完全不同的类型,互不兼容。
泛型方法:方法自己带类型参数,更灵活
泛型方法把类型参数写在方法名后,可独立于所在类是否泛型。编译器常能自动推断类型,调用时可省略尖括号。
示例:
static T GetFirst(IList list)
{
if (list == null || list.Count == 0) throw new ArgumentException();
return list[0];
}
// 调用方式(两种都行):
int first = GetFirst(new[] { 1, 2, 3 }); // 自动推断 T 为 int
string s = GetFirst(new[] { “a”, “b” }); // 显式指定
常用约束(where):给泛型加规则
有时你需要对 T 做限制,比如要求它有无参构造函数、实现某个接口或继承某个类。这时用 where 子句:
class Repository where T : class, IEntity, new() → T 必须是引用类型、实现 IEntity、且有 public 无参构造函数void Process(T value) where T : IComparable → T 必须支持自身比较where T : struct → 限定为值类型(如 int、DateTime)
约束让泛型更安全,也让你能在方法体内放心调用 T 的成员。
泛型委托与常见泛型类型
C# 内置大量泛型类型和委托,直接拿来就用:
集合:List、Dictionary、Queue、HashSet委托:Action、Func、Func、Predicate接口:IEnumerable、IComparable、IEqualityComparer
它们都是泛型设计的最佳实践样本,读源码或文档时多留意其泛型结构,有助于你写出更地道的泛型代码。
基本上就这些。泛型不复杂,但容易忽略约束和推断细节。写的时候想清楚“这个类型需要做什么”,再选合适的约束,代码会更健壮也更易读。
以上就是C#怎么使用泛型 C#泛型类与泛型方法定义的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1442946.html
微信扫一扫
支付宝扫一扫