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>
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 |
Le interfacce | |
IEnumerator | IEnumerator<T> |
IEnumerable | IEnumerable<T> |
ICollection | ICollection<T> |
IList | IList<T> |
IDictionary | IDictionary |
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.
Si, in realtà ho preso spunto dal tuo post!
Ma dato che sto già pensando al Real Code Day 2, hai già capito anche quale potrebbe essere uno degli argomenti...
Ciao, Ricky.
Allora ho "studiato" ciò che hai scritto nel messaggi e mi sono riposto delle domande su come implemntare una situazione tipo che si può verificare in una collecition, ma non ne sono venuto a capo, del tipo
prendiamo un entità come la seguente
int ID
int Nome
entity_city City
a seguire l'entità entity_city espone pubblicamente
int ID
int Nome
int Cap
quindi dall'entita precedente poteri fare myIdentity.City.ID / Nome / Cap
se volessi fare una select implementando Collection<T> come hai detto tu sopra, una select tipo questa:
public myCollection<T> Select (entity_city _City)
{
for (int i=0; i< base.Items.Count; i++)
{
if(base.Item[i].City.Cap == City.Cap)
{
///esegui del codice
}
}
}
Tu in un post mi hai detto giustamente devi dire alla collection che T implementa un entity_city e devi farlo tramite il constrains di un intefaccia.
Ok ma in questo caso devo preparaemi una collection generica per tutte quelle entità che implementano la mia interfaccia che espone entity_city?
In caso la risposta fosse negativa posso dire al parametro della funzione _City che è un tipo generico ma non di tipo T?
Diciamo che ho "risolto" momentaneamente realizzando una collection per ogni tipo che espone entity_city, ma in questo caso che generics sono?
Spero di non aver esagerato con la domanda ma era bello capire fino a che punto si posso spingere i generics.
byez
Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.




Stampa
Download

10annidi.ASPItalia.com: iscriviti alla competizione e vinci fantastici premi ogni mese!

ops, ma sono stato io a fare sta cosa con tutti i post sul forum
Continua »»» | Rispondi »»»