请解释 C# 中 ReadOnlyCollection 的概念,并说明如何构造一个只读集合。
考察说明
考查对 C# 只读集合的理解及创建方式。
回答思路
- 【回答框架 1】ReadOnlyCollection 是 System.Collections.ObjectModel 命名空间下的泛型类,它包装了一个 IList 接口,提供只读的集合视图,不允许添加、删除或修改元素。其核心特征是提供只读访问,但底层集合若被修改,ReadOnlyCollection 会反映这些变化。
- 【回答框架 2】创建只读集合一般通过构造函数传入现有的 IList 实现,例如 List,然后返回 ReadOnlyCollection 实例。也可以使用 List 的 AsReadOnly 方法快速获得只读包装。
- 【回答框架 3】ReadOnlyCollection 本身不保证线程安全,它只是阻止外部修改,若多线程同时操作底层集合仍需同步。此外,它只是视图,不是副本,底层集合变化会反映到只读集合中。
- 【关键点 1】ReadOnlyCollection 提供只读包装,不保证底层不变。
- 【关键点 2】创建方式:new ReadOnlyCollection(list) 或 list.AsReadOnly()。
- 【关键点 3】修改底层集合会影响只读视图。
- 【易错点 1】误以为只读集合是副本,实际是视图。
- 【易错点 2】只读集合不保证线程安全,需要额外同步。