|
Improve type safety and application performance by using generic collections (System.Collections.Generic namespace) |
Si tratta delle nuove collezioni, basate sui tipi generici e che quando vengono instanziate “acquisiscono” i tipi. Sono quindi implicitamente piu’ sicure di quelle tradizionali perchè una collezione di un certo tipo potrà contenere solo elementi di quel tipo, non elementi differenti. Nelle collezioni tradizionali questo non era vero, erano omogenee solo per il tipo di base (Object), ma in pratica potevano contenere pere/mele/rinoceronti in modo indistinto. Le collezioni sono anche piu’ performanti perchè non fanno boxing/unboxing con un bel risparmio di risorse.
Le interfacce sono le stesse delle altre collezioni: ICollection, IComparer, IDictionary, IEnumerable, IEnumerator, IEqualityComparer, IList, ma sono generiche es. IList<T>.
System.Collection.Generics System.Collection
Dictionary Hashtable
List Arraylist
Queue Queue
Stack Stack
SortedList SortedList
C’e’ anche una LinkedList , lista bilincata, i cui elementi sono LinkedListNode.
LinkedList<PuntoStruct> mieiPunti = new LinkedList<PuntoStruct>();
mieiPunti.AddFirst(new PuntoStruct(1, 1, 1));
mieiPunti.AddLast (new PuntoStruct(3,3, 3));
//inserisco nella seconda posizione un nuovo punto
LinkedListNode<PuntoStruct> pRef = mieiPunti.First;
mieiPunti.AddAfter(pRef, new PuntoStruct(2, 2, 2));
foreach (PuntoStruct p in mieiPunti)
Console.WriteLine(p.ToString());
Manage a group of associated data using collections (System.Collections namespace)
Classi: Le classi non fanno che implementare le interfacce.:
ArrayList, implementa: IList, ICollection, IEnumerable, ICloneable
Hashtable: implementa IDictionary, ICollection, IEnumerable, ICloneable .. e qualche altra interfaccia non di liste per la serializzazione e deserializzazione;
CollectionBase: è una classe astratta per collezioni fortemente tipizzate. Implementa IList, ICollection, IEnumerable.
Per usarla si deve creare una propria classe derivando da quella..
ReadOnlyCollectionBase: è una classe astratta per una collezione che, dopo la fase di creazione, diventa read-only
DictionaryBase: è la classe astratta per un dizionario: insieme di coppie chiave-valore.
DictionaryEntry: è la classe per definire la coppia chiave – valore.
Queue: è una lista tradizionale (FIFO), implementa ICollection, IEnumerable, Icloneable.
SortedList: è una sorta di dizionario ordinato per chiave, accessibile sia per chiave che per indice. Implementa: ICollection, IEnumerable, ICloneable
BitArray: gestisce in modo compatto un array di bit. Implementa ICollection, IEnumerable, ICloneable.
Stack: è la classica lista LIFO. Implementa: ICollection, IEnumerable, ICloneable
Comparer: serve per paragonare due oggetti, il costruttore puo’ prende la cultura come parametro. C’e’ anche una bella classe CaseInsensitiveComparer bello per paragonare le stringhe