什么叫集合
集合是指可以在运行时添加、修改和删除数据的数据结构,在.NET中最常见的就是Collection、List和Dictionary。关于集合的基本概念我就不在此谈论,大家可以看看MSND,或参考:
.NET 2.0泛型集合类与.NET 1.1集合类的区别(一)
.NET 2.0泛型集合类与.NET 1.1集合类的区别(二)
.NET 2.0泛型集合类与.NET 1.1集合类的区别(三)
这篇文章中我将重点说明如何设计良好的集合。
设计良好的集合
l 可达的
所谓可达的,就是指你的集合实例必须能够被访问到,例如在Word中你可以通过下面的句子访问到所有的文档:
Application.Documents
l 可控制的
如果需要,你的集合类还应该包含必要的访问方法,例如Add、索引和Remove方法,这些使外界可以控制集合。
l 强健的
你的集合对外界的访问必须是强健的,这不仅仅包括集合的强类型,还包括诸如没有中间状态,例如最好不要这样设计:
Windows.Add(new Window());
Windows.EndAdd();
上面的例子中如果没有及时调用EndAdd就可能造成中间状态,如果你为了提高性能,你可以不使用Begion/End的设计方式,而是允许传入一个数组的方式批量加入。
通常你不应该公开不需要的变量。
l 可跟踪的(增强)
这一点不是必须的,实现IBindingList可以让外界跟踪集合的变化,但你必须在性能上作出牺牲(当然牺牲并不大)。
l 延迟填充(增强)
并不是所有的集合实例总是在内存中一直存在,有些集合可能生命周期很短,例如环境菜单,他需要在点击右键时才能决定如何构建菜单,点击后集合也不再需要。另外一种需要预先填充数据的集合,例如包含所有实体类型定义的集合,包含所有数据库连接的集合,他们也适合使用延迟加载技术。
通常你可以在集合中设计一个Reset方法,并包含Reseting事件,在事件参数中包含集合本身。这样外界就可以拦截此事件以便填充必要的默认数据。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构