IList<T>
接口除了支持索引访问外,还支持一些SortedList<TKey, TValue>.Keys
属性不支持的操作,例如Add
、Remove
和Insert
。
ReadOnlyCollection<T>
(例如List<T>.AsReadOnly
的返回值)实现了IList<T>
,因此提供了索引访问,但是通过显式实现来隐藏了像Add
等非法操作。此外,它只是底层列表的包装器,因此不会创建副本,应该(我认为)不会产生任何真正的性能问题。
有什么想法,为什么SortedList<TKey, TValue.Keys
不是ReadOnlyCollection<TKey>
?(同样,Values
属性为什么不是ReadOnlyColllection<TValue>
?)
ReadOnlyCollection<T>
类可以包装实现IList<T>
接口的任何类的对象;因此,即使Keys
属性以其自己特殊的方式实现了IList<T>
接口,它仍然可以作为一个简单地包装该对象的ReadOnlyCollection<T>
对象来公开,无论它如何实现IList<T>
接口。 - Dan Tao