为何System.Collections.Generic.SynchronizedCollection<T>的items与sync字段无readonly修饰符?
关于
SynchronizedCollection<T>中items和sync字段未加readonly的分析 先明确核心点:readonly的作用是确保字段只能在构造阶段(构造函数或字段初始化)赋值,之后无法被重新分配引用。从你提到的新旧版本代码来看,items和sync确实只在构造时完成初始化,后续没有任何重新赋值的逻辑——理论上完全可以加上readonly来提升代码安全性和可读性。
那为什么官方代码里没加?可能性大概有这些:
- 历史编码习惯:早期.NET框架(比如旧版WCF的代码)的编码规范中,对私有字段是否加
readonly没有强制要求,开发人员没刻意添加,后续维护也没统一修正这类细节。 - 预留潜在扩展:虽然当前代码里没有修改这两个字段的逻辑,但当初设计时可能考虑过未来需要替换整个集合实例或同步对象的场景,故意不添加
readonly留有余地(不过从代码的长期演化来看,这个可能性已经很低)。 - 和性能无关:别被“性能优化”误导——
readonly不会带来任何性能损耗,JIT编译器对带readonly和不带的私有字段优化逻辑完全一致,不存在为了性能刻意不加的情况。 - 维护时的疏忽:在代码迁移或迭代的过程中,开发人员没注意到这两个字段可以补加
readonly,也就没做修改。
总结来说,这更像是编码习惯或历史遗留的小细节,而非有什么特殊的技术考量。如果你自己基于这个类做衍生实现,完全可以给这两个字段加上readonly,不会有任何问题。
内容的提问来源于stack exchange,提问作者Denis
相关产品推荐
相关产品推荐

