请参阅 System.Array 类的定义
public abstract class Array : IList, ...
从理论上讲,我应该能够写点东西并开心
int[] list = new int[] {}; IList iList = (IList)list;
我也应该能够从iList调用任何方法
ilist.Add(1); //exception here
我的问题不是为什么我会得到异常,而是 为什么Array实现了IList ?
因为数组允许按索引快速访问,并且IList/ IList<T>是唯一支持此功能的集合接口。因此,也许您真正的问题是“为什么没有索引器的常量集合的接口?” 对此,我没有答案。
IList
IList<T>
也没有用于集合的只读接口。而且我想念那些超出索引器接口恒定大小的东西。
IMO应根据集合的功能,再有几个(通用)集合接口。而且名称也应该有所不同,List因为带有索引器的东西确实是愚蠢的IMO。
List
IEnumerable<T>
ICollection<T>
我认为当前的收集接口设计不好。但是,由于它们具有告诉您哪些方法有效的属性(这是这些方法的约定的一部分),因此不会违反替代原理。