Icollection реализуется из Ienumberable (ICollection: IEnumerable), то почему снова Icollection & IEnumerable оба реализуют для IList (интерфейс IList: ICollection, IEnumerable).
Ваше предположение неверно.
Исходный источник для System.Collections.IList
показывает, что он определяется как
public interface IList : ICollection
Это было бы справедливо и означало бы точно то же самое, если бы IEnumerable
был указан там, но вопреки тому, что ваш вопрос говорит, это не так.
IList
определяется как IList : ICollection, IEnumerable
вместо просто IList : ICollection
как вы и ожидали, не так ли? Я думаю , что я достаточно убедительно показал , что она определяется только как IList : ICollection
.
Документация показывает все реализованные интерфейсы для пояснения, чтобы вы могли легко увидеть все реализованные интерфейсы (я предполагаю, почему вы спрашиваете об этом).
В коде эти две версии являются эквивалентными:
IList<T> : ICollection<T>
IList<T> : ICollection<T>, IEnumerable<T>
Интерфейс ICollection расширяет IEnumerable.
IList - это более специализированный интерфейс, расширяющий ICollection.
источник: http://msdn.microsoft.com/en-us/library/system.collections.icollection%28v=vs.110%29.aspx (см. примечания)