Предположим, у меня есть абстрактный базовый класс BaseTimeCollection
и по крайней мере один конкретный класс ConcreteTimeCollection
, который наследуется от базового класса.
Я бы хотел, чтобы мой базовый класс унаследовал от ICollection
.
Для наследования от ICollection
я должен предоставить реализации для ряда методов, включая IEnumerable.GetEnumerator ()
и IEnumerable
].
Я не хочу реализовывать эти методы в 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()
}
}
Что я пропустил?
Есть ли способ отложить реализацию методов GetEnumerator
до конкретных классов?