Supongamos que tengo una clase base abstracta BaseTimeCollection
y al menos una clase concreta ConcreteTimeCollection
que hereda de la clase base.Clase base abstracta que hereda ICollection <T>
Me gustaría que mi clase base herede de ICollection<T>
.
Heredar desde ICollection<T>
requiere que proporcione implementaciones para una serie de métodos, incluidos IEnumerable.GetEnumerator()
y IEnumerable<T>.GetEnumerator
.
No quiero implementar estos métodos en BaseTimeCollection
- en su lugar, preferiría implementarlos individualmente en cada una de mis clases concretas.
Aquí es donde me encuentro en problemas.
Los métodos GetEnumerator
deben declararse explícitamente, porque hay dos de ellos con el mismo nombre pero diferentes tipos de devolución. Sin embargo, parece que tan pronto como haga explícita la firma ya no puedo usar el modificador abstracto. Esencialmente, estoy obligado a implementar el método GetEnumerator
en mi clase base.
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()
}
}
Qué me he perdido?
¿Hay alguna manera de diferir la implementación de los métodos
GetEnumerator
a las clases concretas?
¿Cuál es el error de compilación que está obteniendo? –