Question

Je ne comprends pas pourquoi IList implémente IEnumerable en tenant compte du fait que IList implémente ICollection qui implémente < code> IEnumerable également.

Était-ce utile?

La solution

Je suppose que vous voulez savoir pourquoi il déclare implémenter ICollection ainsi que IEnumerable , lorsque le premier implique le second. Je suppose que la raison principale en est la clarté: cela signifie que les utilisateurs n'ont pas besoin de revenir en arrière sur ICollection pour vérifier que cela étend déjà IEnumerable .

Il est parfois nécessaire de redéclarer une implémentation d'interface, si vous souhaitez réimplémenter une méthode d'interface qui était auparavant explicitement implémentée dans une classe de base - mais je ne pense pas que ce soit la raison dans ce cas.

EDIT: Je suppose que le code source à partir duquel les documents sont générés a la déclaration incluant les deux interfaces. Une autre alternative possible est que toutes toutes les interfaces de la hiérarchie soient automatiquement extraites par le générateur de doc. Dans ce cas, la question devient "Pourquoi le générateur de documentation le fait-il" - et la réponse est presque certainement toujours "clarté".

Autres conseils

IList implémente uniquement IEnumerable par associaton; c'est-à-dire qu'il implémente IEnumerable précisément car il hérite de ICollection qui est IEnumerable . Vous obtiendriez la même chose avec les hiérarchies de types (bien qu’un seul héritage:

class Enumerable {}
class Collection : Enumerable {}
class List : Collection {}

so List est un Enumerable ; De la même manière, IList est IEnumerable .

Par exemple, si j'écris:

interface IA {}
interface IB : IA { }
interface IC : IB { }

Et regardez les métadonnées, puis il apparaît que IC: IA, IB - mais ce n’est qu’indirect; voici l'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 vous deviez ouvrir le code dans ReSharper, cela indiquerait que la déclaration d'interface IEnumerable sur IList n'était pas requise, car elle est déjà spécifiée via ICollection .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top