В чем разница между IEnumerable
и IEnumerable<T>
?
Я видел много классов фреймворка, реализующих оба этих интерфейса, поэтому я хотел бы знать, какие преимущества можно получить при реализации обоих?
Посмотрите, как они были определены:
public interface IEnumerable
{
[DispId(-4)]
IEnumerator GetEnumerator();
}
public interface IEnumerable<T> : IEnumerable
{
IEnumerator<T> GetEnumerator();
}
Как мы видим, IEnumerable<T>
происходит от IEnumerable
, это означает, что любой IEnumerable
имеет, IEnumerable<T>
наследует, то почему мы реализуем оба, а не только IEnumerable<T>
? Не реализует IEnumerable<T>
недостаточно?
Аналогично, существуют и другие аналогичные пары:
-
IList
иIList<T>
-
ICollection
иICollection<T>
Я также хотел бы узнать об этом.