Interfaz IEnumerable
-
10-07-2019 - |
Pregunta
No entiendo por qué IList
implementa IEnumerable
teniendo en cuenta que IList
implementa ICollection
que implementa < code> IEnumerable también.
Solución
Supongo que desea saber por qué declara que implementa ICollection
y IEnumerable
, cuando el primero implica el segundo. Sospecho que la razón principal es la claridad: significa que las personas no necesitan mirar hacia atrás a ICollection
para verificar que eso ya extiende IEnumerable
.
Hay otros momentos en los que necesita volver a declarar una implementación de interfaz, si desea volver a implementar un método de interfaz que se implementó previamente explícitamente en una clase base, pero no creo que esa sea la razón en este caso.
EDITAR: he estado asumiendo que el código fuente con el que se crean los documentos tiene la declaración que incluye ambas interfaces. Otra alternativa posible es que el generador de documentos extrae automáticamente las interfaces todas en la jerarquía. En cuyo caso la pregunta se convierte en "¿por qué el generador de documentos hace eso"? - y la respuesta es casi seguro "claridad".
Otros consejos
IList
solo implementa IEnumerable
por associaton; es decir, implementa IEnumerable
precisamente porque hereda ICollection
que es IEnumerable
. Obtendría lo mismo con las jerarquías de tipos (aunque solo una sola herencia:
class Enumerable {}
class Collection : Enumerable {}
class List : Collection {}
entonces List
es un Enumerable
; de la misma manera, IList
es IEnumerable
.
Por ejemplo, si escribo:
interface IA {}
interface IB : IA { }
interface IC : IB { }
Y mira los metadatos, entonces parece que IC: IA, IB
- pero esto es solo indirecto; aquí está el IL:
.class private interface abstract auto ansi IA
{
}
.class private interface abstract auto ansi IB
implements IA
{
}
.class private interface abstract auto ansi IC
implements IB, IA
{
}
Si tuviera que abrir el código en ReSharper, indicaría que la declaración de interfaz IEnumerable
en IList
no era necesaria, ya que ya se especifica a través de ICollection
.