Collezioni e generics

di Riccardo Golia, in DotNet 2.0,

Visto che al Real Code Day abbiamo parlato di collezioni tipizzate e, in particolare, delle interfacce che una collezione deve implementare e della classe astratta CollectionBase, mi sembrava interessante proporre questa tabellina riassuntiva che mette in evidenza la corrispondenza dei tipi relativi al namespace System.Collection della versione 1.x del framework e i nuovi tipi Generics della versione 2.0.

In particolare mi piace sottolineare la corrispondenza che esiste tra CollectionBase e Collection<T> e tra ArrayList e List<T>.

Il tipo List<T> corrisponde all'ArrayList tipizzato nella versione Generics. La collezione generica per la realizzazione di collezioni tipizzate con la versione 2.0 del framework è Collection<T> che equivale alla precedente CollectionBase (anche se non è astratta) e che utilizza un List<T> internamente per contenere l'elenco di dati.

Collection<T> implementa le interfacce ICollection, IList, IEnumerable, ICollection<T>, IList<T>, IEnumerable<T> ed è espressamente pensata per essere la classe base per le collezioni tipizzate nella versione 2.0. List<T> implementa le stesse interfacce ed un tipo che espone una marea di metodi per l'ordinamento, la ricerca e la manipolazione dei dati in esso contenuti. Collection<T> ha una interfaccia più snella e funge da wrapper per l'oggetto List<T> incapsulato.

Come dice anche il buon Andrea, l'interfaccia di List<T> è dichiarata da Microsoft stessa troppo ricca per le API pubbliche, quindi per proprietà e metodi (argomenti, return value) bisognerebbe usare sempre Collection<T>.

System.Collections

System.Collections.Generic
System.Collections.ObjectModel

Le interfacce

IEnumerator

IEnumerator<T>

IEnumerable

IEnumerable<T>

ICollection

ICollection<T>

IList

IList<T>

IDictionary

IDictionary<K,V>

Le collezioni ICollection<T>

Stack

Stack<T>

Queue

Queue<T>

Le collezioni IList<T>

System.Array

System.Array [*]

ArrayList

List<T>

StringCollection

List<string>

---

LinkedList<T>

CollectionBase

Collection<T>

ReadOnlyCollectionBase

ReadOnlyCollection<T>

Le collezioni IDictionary<T>

HashTable, DictionaryBase, HybridDictionary, ListDictionary

Dictionary<K,V>

StringDictionary

Dictionary<string,string>

SortedList

SortedDictionary<K,V>

NameObjectCollectionBase

SortedDictionary<string,object>

NameValueCollection

SortedDictionary<string,string[]>

Comparazione

System.IComparable

IComparable<T>

Comparer

Comparer<T>

[*] In System.Array sono stati aggiunti numerosi metodi generici per elaborare in modo tipizzato i vettori.

Ringrazio (luKa) e Andrea per il confronto di idee. ;)

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Nella stessa categoria
I più letti del mese