gpt4 book ai didi

c# - 为什么数组实现 IList?

转载 作者:IT王子 更新时间:2023-10-29 03:32:51 26 4
gpt4 key购买 nike

参见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>是唯一支持此功能的集合接口(interface)。所以也许你真正的问题是“为什么没有用于索引器的常量集合的接口(interface)?”对此我没有答案。

集合也没有只读接口(interface)。我想念的不仅仅是带有索引器界面的常量大小。

IMO 应该有几个(通用的)集合接口(interface),具体取决于集合的特性。而且名称也应该不同,List对于带有索引器的东西在我看来真的很愚蠢。

  • 只是枚举 IEnumerable<T>
  • 只读但没有索引器(.Count、.Contains、...)
  • 可调整大小但没有索引器,即设置为(添加、删除、...)当前 ICollection<T>
  • Readonly with indexer (indexer, indexof,...)
  • Constant size with indexer(带 setter 的索引器)
  • 带索引器的可变大小(插入,...) 当前 IList<T>

我认为当前的集合界面设计很糟糕。但由于它们具有告诉您哪些方法有效的属性(这是这些方法的契约的一部分),因此它不会违反替换原则。

关于c# - 为什么数组实现 IList?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5968708/

26 4 0