跳转到内容
主菜单
主菜单
移至侧栏
隐藏
导航
首页
最近更改
随机页面
MediaWiki帮助
代码酷
搜索
搜索
中文(中国大陆)
外观
创建账号
登录
个人工具
创建账号
登录
未登录编辑者的页面
了解详情
贡献
讨论
编辑“︁
C Sharp 泛型类
”︁
页面
讨论
大陆简体
阅读
编辑
编辑源代码
查看历史
工具
工具
移至侧栏
隐藏
操作
阅读
编辑
编辑源代码
查看历史
常规
链入页面
相关更改
特殊页面
页面信息
外观
移至侧栏
隐藏
您的更改会在有权核准的用户核准后向读者展示。
警告:
您没有登录。如果您进行任何编辑,您的IP地址会公开展示。如果您
登录
或
创建账号
,您的编辑会以您的用户名署名,此外还有其他益处。
反垃圾检查。
不要
加入这个!
{{DISPLAYTITLE:C#泛型类}} '''C#泛型类'''是C#语言中一种强大的特性,允许开发者创建可重用的、类型安全的类,而无需在编译时指定具体的数据类型。泛型类通过类型参数(Type Parameters)实现,使得代码更加灵活且减少重复。 == 介绍 == 泛型类的主要目的是提供**类型安全性**和**代码复用性**。通过泛型,可以避免装箱(Boxing)和拆箱(Unboxing)操作,提高性能。例如,`List<T>`是.NET中最常见的泛型类之一,其中`T`是类型参数,可以是任何数据类型(如`int`、`string`或自定义类)。 泛型类适用于以下场景: * 需要操作多种数据类型,但逻辑相同(如集合类)。 * 避免强制类型转换,减少运行时错误。 * 提高代码的可读性和维护性。 == 语法 == 泛型类使用尖括号`<>`定义类型参数,语法如下: <syntaxhighlight lang="csharp"> public class GenericClass<T> { private T _value; public GenericClass(T value) { _value = value; } public T GetValue() { return _value; } } </syntaxhighlight> * `T`是类型参数,在实例化时替换为具体类型(如`int`或`string`)。 * 泛型类可以有多个类型参数,如`GenericClass<TKey, TValue>`。 === 示例:基本用法 === <syntaxhighlight lang="csharp"> // 实例化泛型类 var intContainer = new GenericClass<int>(42); var stringContainer = new GenericClass<string>("Hello"); Console.WriteLine(intContainer.GetValue()); // 输出: 42 Console.WriteLine(stringContainer.GetValue()); // 输出: Hello </syntaxhighlight> == 类型约束 == 通过约束(Constraints)可以限制类型参数的范围,确保安全性。常用约束包括: * `where T : struct`:`T`必须是值类型。 * `where T : class`:`T`必须是引用类型。 * `where T : new()`:`T`必须有无参构造函数。 * `where T : BaseClass`:`T`必须继承自`BaseClass`。 === 示例:带约束的泛型类 === <syntaxhighlight lang="csharp"> public class Calculator<T> where T : IComparable { public T Max(T a, T b) { return a.CompareTo(b) > 0 ? a : b; } } // 使用 var calculator = new Calculator<int>(); Console.WriteLine(calculator.Max(10, 20)); // 输出: 20 </syntaxhighlight> == 实际应用案例 == === 案例1:泛型集合 === .NET的`List<T>`是泛型类的典型应用,避免了非泛型集合(如`ArrayList`)的装箱问题: <syntaxhighlight lang="csharp"> List<int> numbers = new List<int> { 1, 2, 3 }; List<string> names = new List<string> { "Alice", "Bob" }; </syntaxhighlight> === 案例2:泛型缓存 === 创建一个缓存类,存储任意类型的数据: <syntaxhighlight lang="csharp"> public class Cache<T> { private Dictionary<string, T> _cache = new Dictionary<string, T>(); public void Add(string key, T value) => _cache[key] = value; public T Get(string key) => _cache[key]; } // 使用 var intCache = new Cache<int>(); intCache.Add("age", 25); Console.WriteLine(intCache.Get("age")); // 输出: 25 </syntaxhighlight> == 泛型类与继承 == 泛型类可以继承自非泛型类或泛型类: <syntaxhighlight lang="csharp"> public class BaseClass { } public class DerivedGenericClass<T> : BaseClass { } // 或继承自泛型基类 public class BaseGenericClass<T> { } public class DerivedClass<T> : BaseGenericClass<T> { } </syntaxhighlight> == 性能优势 == 泛型类在编译时生成特定类型的代码,避免了运行时类型检查的开销。例如: * 非泛型`ArrayList`需要装箱`int`为`object`,而`List<int>`直接操作值类型。 * 减少了类型转换错误的风险。 == 总结 == * 泛型类通过类型参数实现代码复用和类型安全。 * 支持约束以限制类型范围。 * 广泛用于集合、缓存等场景。 * 提供更好的性能和可读性。 <mermaid> classDiagram class GenericClass<T> { -T _value +GenericClass(T value) +T GetValue() } GenericClass <|-- Cache : 继承 </mermaid> 通过泛型类,开发者可以编写更灵活、高效的代码,同时减少重复劳动。 [[Category:编程语言]] [[Category:C Sharp]] [[Category:C Sharp 高级类特性]]
摘要:
请注意,所有对代码酷的贡献均被视为依照知识共享署名-非商业性使用-相同方式共享发表(详情请见
代码酷:著作权
)。如果您不希望您的文字作品被随意编辑和分发传播,请不要在此提交。
您同时也向我们承诺,您提交的内容为您自己所创作,或是复制自公共领域或类似自由来源。
未经许可,请勿提交受著作权保护的作品!
取消
编辑帮助
(在新窗口中打开)