Quel est le véritable avantage de renvoyer ICollection < T > au lieu d'une liste < T > ;? [dupliquer]

StackOverflow https://stackoverflow.com/questions/426182

Question

J'ai lu quelques articles de blog mentionnant que pour les API publiques, nous devrions toujours renvoyer ICollection (ou IEnumerable) au lieu de List. Quel est le véritable avantage de renvoyer ICollection au lieu d’une liste?

Merci!

Duplicate: Quelle est la différence entre Liste (de T) et Collection (de T)?

Était-ce utile?

La solution

Un énumérateur ne renvoie qu'une entité à la fois lorsque vous le parcourez. En effet, il utilise un rendement . Une collection, en revanche, renvoie la liste complète, ce qui nécessite que cette liste soit entièrement stockée en mémoire.

La réponse courte est que les recenseurs sont plus légers et plus efficaces.

Autres conseils

Cela vous donne plus de liberté lors du choix de la structure de données sous-jacente.

Une liste suppose que l'implémentation prend en charge l'indexation, mais ICollection n'émet aucune hypothèse de ce type.

Cela signifie que si vous découvrez qu'un ensemble peut offrir de meilleures performances car l'ordre n'est pas pertinent, vous êtes libre de modifier votre approche sans affecter les clients.

C’est l’encapsulation de base.

Je pense que IList serait plus approprié, mais ...

ICollection n’est qu’une interface, tandis que List est une implémentation spécifique de cette interface. Et si vous vouliez utiliser plus tard un autre conteneur en plus d'une liste? Si vous exposez publiquement une interface ICollection, vous pouvez modifier ultérieurement votre conteneur interne en un autre élément, à condition que le nouveau conteneur implémente également l'interface ICollection.

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