Pregunta

No entiendo por qué IList implementa IEnumerable teniendo en cuenta que IList implementa ICollection que implementa < code> IEnumerable también.

¿Fue útil?

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 .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top