csharp:类:泛型

差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

两侧同时换到之前的修订记录 前一修订版
后一修订版
前一修订版
csharp:类:泛型 [2025/11/26 16:51] – [格式:有返回值与 dynamic] 张叶安csharp:类:泛型 [2025/11/27 17:25] (当前版本) 张叶安
行 89: 行 89:
  
 > **dynamic (动态)** > **dynamic (动态)**
-   发音:/daɪˈnæ mɪk/ + 
-   作用:当运行时根据传过来的值确定其类型,跳过编译器的静态检查。+    发音:/daɪˈnæ mɪk/ 
 +  *   作用:当运行时根据传过来的值确定其类型,跳过编译器的静态检查。
  
 ===== 4. 多样化泛型 ===== ===== 4. 多样化泛型 =====
行 179: 行 180:
 </code> </code>
  
-===== 6. 总结 =====+===== 6. 泛型约束 (Constraints) ===== 
 + 
 +默认情况下,泛型 ''T'' 可以是任何类型。但在某些场景下,我们需要限制 ''T'' 必须具备某些特征(例如:必须是引用类型、必须实现了某个接口、或者必须有一个无参构造函数)。 
 + 
 +这时就需要使用 **''where''** 关键字。 
 + 
 +==== 常用约束列表 ==== 
 + 
 +^ 约束语法 ^ 说明 ^ 
 +| ''where T : struct'' | 类型参数必须是**值类型** (如 int, float, struct)。 | 
 +| ''where T : class'' | 类型参数必须是**引用类型** (如 string, class, interface)。 | 
 +| ''where T : new()'' | 类型参数必须有一个**无参数的公共构造函数**。此约束允许在泛型类中创建 T 的实例 (''new T()'')。 | 
 +| ''where T : <基类名>'' | 类型参数必须是指定的基类,或者是派生自该基类的子类。 | 
 +| ''where T : <接口名>'' | 类型参数必须实现指定的接口。 | 
 + 
 +==== 示例代码 ==== 
 + 
 +<code csharp> 
 +// 1. 接口约束示例 
 +// 只有实现了 IDBItem 接口的类,才能作为 T 传入 
 +public bool IsExist<T>(string TableName = null) where T : IDBItem 
 +
 +    // 因为加了约束,编译器知道 T 一定有 IDBItem 的特性 
 +    return true; 
 +
 + 
 +// 2. 构造函数约束示例 
 +// 只有包含无参构造函数的类,才能作为 T 传入 
 +class Factory<T> where T : new() 
 +
 +    public T CreateInstance() 
 +    { 
 +        // 如果没有 new() 约束,这里写 new T() 会报错 
 +        return new T();  
 +    } 
 +
 + 
 +// 3. 组合约束 
 +// T 必须同时满足:是引用类型、实现了 IDisposable 接口、且有无参构造函数 
 +class MyManager<T> where T : class, IDisposable, new() 
 +
 +
 +</code> 
 + 
 +===== 7. 总结 =====
  
 {{.:pasted:20250928-163412.png?500|泛型总结示意图}} {{.:pasted:20250928-163412.png?500|泛型总结示意图}}

该主题尚不存在

您访问的页面并不存在。如果允许,您可以使用创建该页面按钮来创建它。

  • csharp/类/泛型.1764147104.txt.gz
  • 最后更改: 2025/11/26 16:51
  • 张叶安