差别
这里会显示出您选择的修订版和当前版本之间的差别。
| 两侧同时换到之前的修订记录 前一修订版 后一修订版 | 前一修订版 | ||
| csharp:类:泛型 [2025/11/26 16:51] – [格式:有返回值与 dynamic] 张叶安 | csharp:类:泛型 [2025/11/27 17:25] (当前版本) – 张叶安 | ||
|---|---|---|---|
| 行 89: | 行 89: | ||
| > **dynamic (动态)** | > **dynamic (动态)** | ||
| - | > | + | |
| - | > | + | |
| + | * | ||
| ===== 4. 多样化泛型 ===== | ===== 4. 多样化泛型 ===== | ||
| 行 179: | 行 180: | ||
| </ | </ | ||
| - | ===== 6. 总结 ===== | + | ===== 6. 泛型约束 (Constraints) ===== |
| + | |||
| + | 默认情况下,泛型 '' | ||
| + | |||
| + | 这时就需要使用 **'' | ||
| + | |||
| + | ==== 常用约束列表 ==== | ||
| + | |||
| + | ^ 约束语法 ^ 说明 ^ | ||
| + | | '' | ||
| + | | '' | ||
| + | | '' | ||
| + | | '' | ||
| + | | '' | ||
| + | |||
| + | ==== 示例代码 ==== | ||
| + | |||
| + | <code csharp> | ||
| + | // 1. 接口约束示例 | ||
| + | // 只有实现了 IDBItem 接口的类,才能作为 T 传入 | ||
| + | public bool IsExist< | ||
| + | { | ||
| + | // 因为加了约束,编译器知道 T 一定有 IDBItem 的特性 | ||
| + | return true; | ||
| + | } | ||
| + | |||
| + | // 2. 构造函数约束示例 | ||
| + | // 只有包含无参构造函数的类,才能作为 T 传入 | ||
| + | class Factory< | ||
| + | { | ||
| + | public T CreateInstance() | ||
| + | { | ||
| + | // 如果没有 new() 约束,这里写 new T() 会报错 | ||
| + | return new T(); | ||
| + | } | ||
| + | } | ||
| + | |||
| + | // 3. 组合约束 | ||
| + | // T 必须同时满足:是引用类型、实现了 IDisposable 接口、且有无参构造函数 | ||
| + | class MyManager< | ||
| + | { | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | ===== 7. 总结 ===== | ||
| {{.: | {{.: | ||