2011-01-06 20 views
6

Qualcuno può dirmi la differenza tra DictionaryBase e generico Dictionary<TKey, TValue>, ad eccezione del fatto che DictionaryBase è una classe astratta! Entrambi sono fortemente tipizzati e ho letto da qualche parte che le classi generiche sono migliori di quelle non generiche in termini di prestazioni e dovrebbero essere preferite, quindi qual è l'uso esatto di DictionaryBase allora? Entrambe le classi sono quasi le stesse!Differenza tra dizionario e dizionario <Tkey,Tvalue>

Qualsiasi tipo di aiuto sarebbe apprezzato

Grazie

risposta

3

Dictionarybase è una classe base che implementa l'interfaccia IDictionary non generica mentre Dictionary è la versione generica di un dizionario che implementa l'interfaccia generica di IDictionary. L'uso di generici è preferito rispetto ai non generici.

penso che questo sarebbe più utile When to use generics?

Utilizzando collezioni generici è generalmente raccomandato, perché si guadagna il beneficio immediato di sicurezza di tipo senza dover derivare da un tipo di raccolta base e implementare specifici di tipo membri. Generici tipi collezione anche generalmente risultati migliori rispetto ai tipi di raccolta non generici corrispondenti (e meglio di tipi che sono derivati ​​ da tipi collezione di base non generico) quando gli elementi di raccolta sono tipi di valore, perché con generici non c'è bisogno di rigore elementi.

anche passare, Introduction to Generics

classi e metodi generici combinare riutilizzabilità, dai tipi e efficienza in modo che le loro controparti non generici non possono. I generici vengono utilizzati più di frequente con le raccolte e con i metodi che operano su di essi. La versione 2.0 della libreria di classi .NET Framework fornisce un nuovo spazio dei nomi, System.Collections.Generic, che contiene diverse nuove classi di raccolta basate sui generici. Si raccomanda che tutte le applicazioni destinati a .NET Framework 2.0 e versioni successive utilizzano le nuove classi di raccolta generici al posto dei più anziani non generici controparti

+0

Entrambe le classi sono fortemente digitate .. e derivano anche dall'interfaccia. Tranne DictionaryBase tutte le classi in System.Collections, immagino non siano specifiche per tipo !! Quindi, la differenza rimane solo dal fatto che derivano da diverse interfacce e che DictionaryBase è una classe astratta. – Batrickparry

+0

Non si dovrebbero rendere obsolete le controparti delle classi generiche in classi non generiche !!!!! – Batrickparry

+0

L'IDictionary generico è una versione generica dell'IDictionary non generico. I generici promuovono la sicurezza e l'efficienza del tipo. –

5

La ragione i tipi di raccolta non generici sono ancora nell'ambito NET è in gran parte per la compatibilità all'indietro. In genere è consigliabile utilizzare i tipi di raccolta generici ogni volta che è possibile.

+1

Quindi, non esiste un uso effettivo di DictionaryBase a causa della presenza del dizionario generico !! – Batrickparry

+0

In effetti, si. –

+0

Grazie Adam .. :) – Batrickparry

0

Ho appena finito di trasformare una vecchia DictionaryBase classe che era IXmlSerializable a generico Dictionary(string, string).

La differenza più dolorosa è che per il Dictionary<string, string> generico, quando chiamo this[key] per una chiave che non esiste, viene visualizzata un'eccezione che indica che la chiave non esiste.

Su un DictionaryBase Torno null senza eccezioni. Questo è stato doloroso nel mio caso perché il sistema era pieno di codice che non controllava il dizionario ContainsKey prima di provare a ottenere il valore delle chiavi. È stato reso più doloroso da parte mia ipotizzando di aver incasinato qualcosa con la serializzazione.

Problemi correlati