Абстрактный базовый класс, наследующий ICollection

Предположим, у меня есть абстрактный базовый класс BaseTimeCollection и по крайней мере один конкретный класс ConcreteTimeCollection , который наследуется от базового класса.

Я бы хотел, чтобы мой базовый класс унаследовал от ICollection .

Для наследования от ICollection я должен предоставить реализации для ряда методов, включая IEnumerable.GetEnumerator () и IEnumerable .GetEnumerator ].

Я не хочу реализовывать эти методы в BaseTimeCollection - вместо этого я бы предпочел реализовать их индивидуально в каждом из моих конкретных классов.

Здесь у меня проблемы.

Методы GetEnumerator должны быть объявлены явно, потому что есть два из них с одинаковым именем, но разными типами возвращаемых значений. Однако, похоже, что как только я сделаю подпись явной, я больше не смогу использовать модификатор abstract. По сути, я вынужден реализовать метод GetEnumerator в моем базовом классе.

public abstract class BaseTimeCollection : ICollection<Time>
{
    abstract IEnumerator IEnumerable.GetEnumerator();  // compile error: The modifier    'abstract' is not valid for this item
    abstract IEnumerator<Time> IEnumerable<Time>.GetEnumerator(); // compile error: The       modifier 'abstract' is not valid for this item
}

public class ConcreteTimeCollection : BaseTimeCollection
{
    IEnumerator IEnumerable.GetEnumerator()
    {
       // this is where I would like to provide my implementation for IEnumerable.GetEnumerator()
    }

    IEnumerator<Time> IEnumerable<Time>.GetEnumerator()
    {
        // this is where I would like to provide my implementation for IEnumerable<Time>.GetEnumerator()
    }
}
  1. Что я пропустил?

  2. Есть ли способ отложить реализацию методов GetEnumerator до конкретных классов?

6
задан knick 28 July 2011 в 13:51
поделиться