5 votes

Pourquoi ICollection<T> implémente-t-il à la fois IEnumerable<T> et IEnumerable

Pourquoi ICollection implémente à la fois IEnumerable et IEnumerable?

Quel est l'objectif de ceci? En quoi IEnumerable bénéficie à ICollection?

12voto

Jon Skeet Points 692016

IEnumerable force toute implémentation à également implémenter le non-générique IEnumerable. C'est sûr, pour les mêmes raisons pour lesquelles IEnumerable est covariant à partir de .NET 4... vous pouvez toujours convertir le T en object pour la forme non-générique.

En gros, cela signifie que si vous avez du code qui utilise un paramètre de type IEnumerable, vous pouvez toujours l'appeler avec quelque chose comme List.

Eric Lippert a écrit un article de blog récemment sur la raison pour laquelle les collections finissent par implémenter de nombreuses interfaces, et Brad Abrams a écrit un article de blog en 2005 sur la décision spécifique IEnumerable/IEnumerable.

9voto

Ilya Kogan Points 7357

L'interface non générique est destinée à assurer la compatibilité ascendante. Si vous écrivez du code en utilisant des génériques et que vous souhaitez transmettre votre collection à un module écrit en .NET 1.0 (qui n'a pas de génériques), vous voulez toujours que cela réussisse, et vous voulez que l'ancienne méthode puisse itérer à travers celle-ci.

-1voto

Andrew Cooper Points 21126

IEnumerable hérite de IEnumerable donc il est logique que ICollection en fasse de même. Cela précise simplement l'héritage qui serait présent de toute façon.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X