2009-12-09 10 views

Répondre

13

La raison en est que l'utilisation d'un List<T> béton est censé être un détail de mise en œuvre, et vous êtes censé exposer quelque chose de plus abstrait, comme IEnumerable<T> ou ICollection<T>, qui ne représente que la fonctionnalité que vous souhaitez exposer (comme étant énumérable, mutable et/ou indexable). Cela vous donne la possibilité de modifier l'implémentation plus tard.

Dans la pratique, cet avertissement est souvent résolu en retournant IList<T> au lieu de List<T>, mais l'idée est de vous inciter à réfléchir à « ce fonctionnalité dois-je réellement besoin pour garantir mes appels? » Par exemple. Je devrais peut-être être de retour IEnumerable<T> ou ReadOnlyCollection<T> parce que je ne veux pas que mes appelants déconner avec la collection retournée.

+0

+1 Bien expliqué :) –

+0

+1 oui. Je l'ai en un. –

+0

Aime l'explication –

2

exposer toujours la plus basse classe de base/interface dans la hiérarchie d'objets qui sera adapté à votre scénario. Par exemple, si les consommateurs de cette propriété vont seulement itérer dessus, utilisez IEnumerable(Of T). En exposant un List<T> vous violez l'encapsulation en donnant accès au code client à un détail de mise en œuvre de votre classe.

1

Une liste générique est une construction .NET, cependant, les services Web sont souvent destinés à être interopérables avec d'autres cadres.

+0

Vous n'avez pas expliqué pourquoi. –

+0

Pourquoi? * "les services web sont souvent destinés à être interopérables avec d'autres frameworks." * Lire s'il vous plaît. Pas la meilleure explication, mais elle répond à la question pourquoi. –

+0

Non, je ne l'ai pas fait, voulez-vous que je le fasse? –