适用于 C# 和 CLI 的 C5 通用集合库
- #C#
- Yaoming
C5 库是一组通用集合类(或容器类),适用于 C# 编程语言和 CLI 平台更高版本上的其他支持泛型的语言,由 Microsoft .NET Framework 4.6.1+、.NET Core 2.0+ 实现、.NET 5.0+ 和 Mono。
C5 库提供了广泛的经典数据结构、丰富的功能、最佳的渐近时间复杂度、记录的性能以及经过彻底测试的实现。
# C5 库的目标
C5 的总体目标是成为 C# 编程语言和公共语言基础设施 (CLI) 的通用集合库,其功能、效率和质量达到或超过类似当代编程平台的可用水平。
该设计受到 Java 和 SmallTalk 集合库以及对这些库的公开批评的影响。
然而,它包含的功能和设计规律性大大超过了这些语言的标准库。
# 为什么还要另一个泛型集合库
已经有其他适用于 C#/CLI 的通用集合库,包括随 .NET 2.0 引入的 System.Collections.Generic 命名空间和 Peter Golde 的 Wintellect 的 Power Collections for .NET (http://powercollections.codeplex.com/)。
Microsoft .NET Framework 2.0 中实现的 CLI 通用集合库提供了有限的数据结构选择。
一般来说,CLI 框架库的方法变体较多,正交性相当差。
数组列表和链表等集合实现具有大致相同的功能,但不实现公共接口。在纳秒级效率比丰富功能更重要的情况下,这会损害库的可学习性,并且需要支持资源相当有限的运行时系统。
Peter Golde 的 Power Collections 库通过各种数据结构和算法增强了 CLI 2.0 版集合库。
然而,它接受 CLI 集合类的基本设计,因此存在一些相同的缺点,并且也不提供大多数高级功能(可更新视图、快照、定向枚举、优先级队列句柄等 updatable views, snapshots, directed enumeration, priority queue handles, ...)。
因此,我们认为,C5 提供了可用于 C#/CLI 的最强大、结构良好且可扩展的通用集合库。
# C5这个名字代表什么?
这还不完全清楚,但它可能代表 C# 的哥本哈根综合集合类,尽管该库可以从 VB.NET、F# 和其他 CLI 语言(而不仅仅是 C#)使用。它与以前称为 Concorde C5/Damgaard C5/Navision C5 的 Microsoft Dynamics 产品无关,也与称为 C5(或 Chorus)的实时操作系统、C5 Corporation(系统可视化)或 Eclipse 无关。称为 C5 的插件,也不适用于雪铁龙 C5 或克尔维特 C5 或克莱夫·辛克莱 (Clive Sinclair) 命运多舛的 C5 概念车等汽车。
该名称的灵感可能来自于例如已知的多功能 C4 塑料炸药。詹姆斯·邦德电影。
所有商标均属于其所有者。
# 完成状态
在撰写本文时,库的设计和实现已经完成,并且已经系统地编写和应用了广泛的单元测试。
大多数库 API 文档均已到位,但需要校对。
C5 实现最初基于 .NET 2.0 构建,最近才升级到 .NET 4.0。它(尚未)使用 C# 3 和 4 引入的大量新功能,特别是 LINQ 以及协变和逆变类型(covariant and contravariant type)参数。
C5 是一个 .NET Standard 2.0 库,支持 .NET Core 2.0+、.NET 4.6.1+、通用 Windows 平台、Mono 和 Xamarin。
[此处可以找到C5更详细的介绍](https://www.itu.dk/research/c5/latest/ITU-TR-2006-76.pdf "此处可以找到C5更详细的介绍")