На одном из форумов задали такой вопрос, но точного ответа не было. Процитирую:
"Интерфейс IList наследует интерфейсы ICollection и IEnumerable. Хотя ICollection уже наследует IEnumerable.
Тоже самое с IDictionary — он тоже наследует и ICollection, и IEnumerable.
Тоже самое с интерфейсами в System.Collections.Generic.
Насколько я понимаю интерфейсы в .NET, наследовать ICollection было бы достаточно, а наследование IEnumerable уже избыточно.
Тогда c какой целью явно указывается IEnumerable в предках? Для пущей ясности?"
Здравствуйте, altarvic, Вы писали:
A>На одном из форумов задали такой вопрос, но точного ответа не было. Процитирую:
A>"Интерфейс IList наследует интерфейсы ICollection и IEnumerable. Хотя ICollection уже наследует IEnumerable.
A>Тоже самое с IDictionary — он тоже наследует и ICollection, и IEnumerable.
A>Тоже самое с интерфейсами в System.Collections.Generic.
A>Насколько я понимаю интерфейсы в .NET, наследовать ICollection было бы достаточно, а наследование IEnumerable уже избыточно.
A>Тогда c какой целью явно указывается IEnumerable в предках? Для пущей ясности?"
Список реализуемых интерфейсов всегда планаризуется на уровне метаданных. Сделано это для того, чтобы
исчерпывающий список интерфейсов можно было получить без рекурсии.
Стоит отметить, что в исходниках на C# это не нужно. Т.е. вот такая декларация IList будет вполне законной:
[ComVisible(true)]
public interface IList : ICollection
{
// Methods
int Add(object value);
void Clear();
bool Contains(object value);
int IndexOf(object value);
void Insert(int index, object value);
void Remove(object value);
void RemoveAt(int index);
// Properties
bool IsFixedSize { get; }
bool IsReadOnly { get; }
object this[int index] { get; set; }
}
... << RSDN@Home 1.2.0 alpha rev. 677>>