让我们尝试用/按逻辑跳出框框思考,并清楚地理解您问题中的这三个接口:
当某个实例的类实现了 System.Collection.IEnumerable 接口时,简单来说,我们可以说这个实例既是可枚举的又是可迭代的,这意味着该实例允许以某种方式在单个循环中进行 go/get /pass/traverse/迭代/遍历此实例包含的所有项目和元素。
这意味着这也可以枚举该实例包含的所有项目和元素。
实现 System.Collection.IEnumerable 接口的每个类也实现了 GetEnumerator 方法,该方法不接受任何参数并返回 System.Collections.IEnumerator 实例。
System.Collections.IEnumerator 接口的实例的行为与 C++ 迭代器非常相似。
当某个实例的类实现了 System.Collection.ICollection 接口时,简单来说,我们可以说这个实例是一些事物的集合。
此接口的通用版本,即 System.Collection.Generic.ICollection,提供更多信息,因为此通用接口明确说明集合中事物的类型。
System.Collections.ICollection 接口继承自 System.Collections.IEnumerable 接口,这一切都是合理的、合理的、合乎逻辑的,因为理论上每个集合也是可枚举和可迭代的,这在理论上可以遍历所有每个集合中的项目和元素。
System.Collections.ICollection 接口表示一个可变的有限动态集合,这意味着可以从集合中删除现有项目,并且可以将新项目添加到同一集合中。
这解释了为什么 System.Collections.ICollection 接口具有“添加”和“删除”方法。
因为 System.Collections.ICollection 接口的实例是有限集合,所以“有限”一词意味着该接口的每个集合中始终包含有限数量的项目和元素。
System.Collections.ICollection 接口的属性 Count 应该返回这个数字。
System.Collections.IEnumerable 接口没有 System.Collections.ICollection 接口所具有的这些方法和属性,因为 System.Collections.IEnumerable 将具有 System.Collections.ICollection 的这些方法和属性没有任何意义界面有。
逻辑还说,每个既可枚举又可迭代的实例不一定是
一个集合,不一定是可变的。
当我说可变的时,我的意思是不要立即认为您可以从可枚举和可迭代的东西中添加或删除一些东西。
如果我刚刚创建了一些有限的素数序列,例如,这个有限的素数序列确实是 System.Collections.IEnumerable 接口的一个实例,因为现在我可以遍历这个有限序列中的所有素数一个单一的循环,对它们中的每一个做任何我想做的事情,比如将它们中的每一个打印到控制台窗口或屏幕上,但是这个有限的素数序列不是 System.Collections.ICollection 接口的实例,因为这不是将合数添加到这个有限的素数序列是有意义的。
您还希望在下一次迭代中获得与当前迭代中的当前素数最接近的较大素数,如果是这样,您也不想从这个有限的素数序列中删除现有素数。
您可能还想在 System.Collections.IEnumerable 接口的 GetEnumerator 方法中使用、编码和编写“yield return”来生成素数,而不是在内存堆上分配任何内容,然后执行垃圾收集器 (GC ) 从堆中释放和释放这块内存,因为这显然既浪费了操作系统内存,又降低了性能。
在调用 System.Collections.ICollection 接口的方法和属性时应该在堆上进行动态内存分配和释放,而不是在调用 System.Collections.IEnumerable 接口的方法和属性时(尽管 System.Collections.IEnumerable接口只有 1 个方法和 0 个属性)。
根据其他人在此 Stack Overflow 网页中所说的,System.Collections.IList 接口仅表示 可订购 集合,这解释了为什么 System.Collections.IList 接口的方法与索引相反System.Collections.ICollection 接口的这些。
简而言之,System.Collections.ICollection 接口并不意味着它的实例是可订购的,但 System.Collections.IList 接口确实暗示了这一点。
理论上有序集是无序集的特例。
这也是有道理的,并解释了为什么 System.Collections.IList 接口继承 System.Collections.ICollection 接口。