Вопрос

Я не понимаю, почему IList реализует IEnumerable , учитывая, что IList реализует ICollection , который реализует < code> IEnumerable также.

Это было полезно?

Решение

Я предполагаю, что вы хотите знать, почему он объявляет, что он реализует ICollection , а также IEnumerable , когда первое подразумевает второе. Я подозреваю, что основной причиной является ясность: это означает, что людям не нужно оглядываться на ICollection , чтобы проверить, что это уже расширяет IEnumerable .

В других случаях вам необходимо переопределить реализацию интерфейса, если вы хотите повторно реализовать метод интерфейса, который ранее был явно реализован в базовом классе, - но я не думаю, что причина в этом случае.

РЕДАКТИРОВАТЬ: я предполагал, что исходный код, из которого построены документы, имеет объявление, включающее оба интерфейса. Другой возможной альтернативой является то, что все интерфейсы в иерархии автоматически извлекаются генератором документов. В этом случае возникает вопрос «почему генератор документов так делает»? - и ответ почти наверняка все еще "ясность".

Другие советы

IList реализует IEnumerable только по ассоциации; то есть он реализует IEnumerable точно , потому что он наследует ICollection , который является IEnumerable . Вы получите то же самое с иерархиями типов (хотя только одно наследование:

class Enumerable {}
class Collection : Enumerable {}
class List : Collection {}

so List является Enumerable ; точно так же IList является IEnumerable .

Например, если я напишу:

interface IA {}
interface IB : IA { }
interface IC : IB { }

И посмотрите на метаданные, тогда кажется, что IC: IA, IB - но это только косвенно; вот ил:

.class private interface abstract auto ansi IA
{
}
.class private interface abstract auto ansi IB
    implements IA
{
}
.class private interface abstract auto ansi IC
    implements IB, IA
{
}

Если вы откроете код в ReSharper, это будет означать, что объявление интерфейса IEnumerable в IList не требуется, так как оно уже указано в ICollection .

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top