Я заметил такую 'странность'. Например интерфейс ICollection объявляется так:
public interface ICollection : IEnumerable
{
...
}
а производный от него класс Stack так:
public class Stack : ICollection, IEnumerable, ICloneable
{
...
}
И это при том, что ICollection уже наследует
IEnumerable! Тогда какой смысл Stack-у наследовать
IEnumerable еще раз? Причем разработчики видимо взяли этот прием на вооружение, т.к. такой способ описания классов и интерфейсов встречается сплошь и рядом(посмотрите на IList например, или ArrayList).
Я пробовал создавать классы которые просто наследуют ICollection и которые наследуют так:
class МойКласс : ICollection, IEnumerable
{
...
}
...и разницы не заметил. Может я чего о интерфейсах не знаю