2010-12-04 6 views
2

Je l'ai déjà recherché sur MSDN et j'ai lu la définition que c'est un non générique .... mais mon problème est que je ne comprends pas quelle est son utilisation et quand l'utiliser. Donc j'espère que n'importe qui peut m'aider. Merci .À quoi sert IList?

+0

Il y a une liste générique trouvée dans System.Collections.Generic - C'est une interface utilisée par des classes telles que la liste – CarneyCode

Répondre

1

Il s'agit d'une interface qui existait avant que génériques ont été introduits dans .NET 2.0.

Il est là pour la rétrocompatibilité.

Utilisez la version générique.

3

IList (version non générique) est un reste de C# version 1, quand nous n'avions pas de génériques. Avec C# 2 et .NET Framework 2.0, des génériques ont été ajoutés au langage et des implémentations génériques des types de collection ont été ajoutées. Par conséquent, les versions non génériques n'étaient plus nécessaires, mais elles ne pouvaient pas être supprimées du framework, car cela rendrait le portage de .NET 1.1 vers 2.0 pénible.

Aujourd'hui, vous utilisez presque toujours IList<T>, la raison principale pour IList d'être encore là est pour des raisons de compatibilité descendante.

+0

Désolé, mais même maintenant il y a beaucoup d'utilisations du code ** library ** pour utiliser IList (non générique). Toute personne qui dit le contraire n'a pas subi assez de réflexion/data-binding/etc;) –

+1

mais oui; la plupart des codes au niveau de l'application doivent utiliser les versions génériques; rappelez-vous juste qu'il y a beaucoup de code d'infrastructure qui ne connaît pas vos types et ne peut pas utiliser des génériques. –

+0

@ Marc, je suis d'accord sur ces points - il existe des cas d'utilisation lorsque vous avez besoin de la version non générique. J'ai essayé d'indiquer qu'avec les mots _you presque toujours use_ ;-) – driis

1

c'est une interface, qui est normalement implémentée par les classes de collection qui est prévue pour fournir la méthode like list mais dans la version .net moins de 2.0 ie sans introduction générique si vous utilisez framework version 1.0, 1.1 que vous verriez l'utilisation de cette IList

5

En plus du code ancien qui ne connaît pas les médicaments génériques, il y a aussi beaucoup de cas où vous savez que vous avez une liste de données, mais vous ne pouvez pas savoir de ce à l'avance. La liaison de données est un exemple classique ici; une propriété DataSource vérifie généralement IList (et IListSource, généralement), puis examine les objets pour voir quelles propriétés sont disponibles. Il ne peut pas utiliser de génériques dans ce cas.

En fait, chaque fois que vous utilisez la réflexion, IList est plus pratique que IList-of-T, puisque les génériques et la réflexion ne sont pas très bien ensemble. Cela peut être fait, mais c'est une douleur. Malheureusement IList-of-T ne dérive pas de IList il y a des cas où cela peut échouer - mais c'est une bonne règle de 95%.

En particulier, IList vous permet d'utiliser l'indexeur et d'ajouter/supprimer des éléments; choses que IEnumerable ne vous laisse pas faire.

La plupart du code au niveau de l'application (c'est-à-dire le code de tous les jours que vous écrivez pour votre application) devrait probablement se concentrer sur les versions génériques; Cependant, il y a aussi beaucoup de code d'infrastructure qui doit utiliser la réflexion.

+0

Beaucoup de ces scénarios de réflexion deviennent un peu plus faciles (mais parfois plus lents aussi) avec 'dynamic'. Donc la douleur devrait être un peu plus petite dans .net 4. – CodesInChaos

+0

@CodeInChaos - bien, cela n'aidera pas à des choses comme les propriétés par type, mais oui: trouver une méthode Add peut être plus facile. Il y a une complication bien que dynamique ne puisse pas voir les implémentations explicites, donc quelque chose peut implémenter IList et IList-of-T et pourtant être complètement inutilisable de dynamique. –