在 C# 中,泛型约束有哪些类型?请说明如何为泛型类型参数添加约束,并解释每种约束的作用。
考察说明
考查对 C# 泛型约束机制的理解与应用能力。
回答思路
- 【回答框架 1】泛型约束用于限制类型参数必须满足的条件,确保泛型类型或方法能安全使用特定成员。C# 支持多种约束,通过 where 子句声明。
- 【回答框架 2】主要约束包括:where T : class 表示引用类型;where T : struct 表示值类型;where T : new() 表示必须有公共无参构造函数;where T : 基类名 表示必须继承自指定基类;where T : 接口名 表示必须实现指定接口;where T : U 表示类型参数 T 必须是类型参数 U 或派生自 U。
- 【回答框架 3】约束可组合使用,如 where T : class, new(),但 struct 不能与 class、new() 组合,且 new() 必须放在最后。约束在编译时检查,不满足约束的类型参数会导致编译错误。
- 【回答框架 4】使用约束可提高代码安全性,避免运行时类型转换错误,并允许在泛型方法中直接调用约束类型成员,如 new T() 创建实例。
- 【回答框架 5】设计泛型时,应尽量使用最宽松的约束以满足需求,避免过度约束导致灵活性下降。
- 【关键点 1】where T : class 限制为引用类型,where T : struct 限制为值类型。
- 【关键点 2】where T : new() 要求公共无参构造函数,且必须放在约束列表最后。
- 【关键点 3】约束可组合,但 struct 不能与 class、new() 组合。
- 【关键点 4】约束在编译时检查,不满足则编译错误。
- 【关键点 5】使用约束可安全调用类型成员,如 new T()。