2011-01-06 17 views
6

Czy każdy może mi powiedzieć różnica między DictionaryBase i generic Dictionary<TKey, TValue>, z tym że DictionaryBase jest klasą abstrakcyjną! Oba są silnie napisane na maszynie i czytałem gdzieś, że klasy ogólne są lepsze od nietypowych w działaniu i powinny być preferowane, więc jakie jest dokładne użycie DictionaryBase? Obie klasy są prawie takie same!Różnica między bazą słowników i Słownikiem <Tkey,Tvalue>

Wszelkiego rodzaju pomoc będzie mile widziane

Dzięki

Odpowiedz

3

Słownik jest klasą podstawową implementującą nie ogólny interfejs IDictionary, podczas gdy słownik jest ogólną wersją słownika implementującego ogólny interfejs IDictionary. Używanie generycznych jest preferowane w stosunku do nie generycznych.

myślę, że to będzie bardziej pomocne When to use generics?

Korzystanie kolekcji generycznych jest zwykle zalecane, ponieważ można zyskać bezpośrednio na rzecz bezpieczeństwa typu bez konieczności uzyskania od rodzaju zbiórki bazowej i wdrożenie typu specyficznych członków. Typy kolekcji Generic generalnie mają również lepszą wydajność niż odpowiadające im typy kolekcji o nietypowym zbieraniu danych (i lepsze niż typy, które pochodzą z z nienazwanych typów bazowych), gdy elementy kolekcji są typami wartości, ponieważ w przypadku generycznych nie ma potrzeby umieszczania w pudełku elementy.

także przejść, Introduction to Generics

Generic klasy i metody łączenia ponownego użycia, bezpieczeństwa typu i sprawność w sposób, który ich generyczne odpowiedniki non-nie mogę. Generics są najczęściej używane w kolekcjach i metodach , które działają na nich. Wersja 2.0 biblioteki klasy .NET Framework zapewnia nowy obszar nazw, System.Collections.Generic, który zawiera kilka nowych klas kolekcji opartych na generycznych. Zaleca się wszystkie aplikacje, które ukierunkowane .NET Framework 2.0 i później korzystać z nowych klas kolekcji generycznych na zamiast starszych nierodzajową odpowiednikami

+0

Obie klasy są mocno wpisane .. i również pochodzą z interfejsu. Z wyjątkiem DictionaryBase wszystkie klasy w System.Collections, myślę, że nie są specyficzne dla danego typu !! Różnica polega tylko na tym, że pochodzą one z różnych interfejsów i że DictionaryBase jest klasą abstrakcyjną. – Batrickparry

+0

Czy nie powinny odpowiadać odpowiedniki klas ogólnych w klasach nietypowych? Przestarzałe, wtedy !!!!! – Batrickparry

+0

Generyczny IDictionary to ogólna wersja nietypowego IDictionary. Generics promują bezpieczeństwo i wydajność typu. –

5

powodem nierodzajową rodzaje kolekcji są jeszcze w .NET jest w dużej mierze dla wstecznej kompatybilności. Generalnie powinieneś używać ogólnych typów kolekcji, gdy tylko jest to możliwe.

+1

Tak więc, nie ma rzeczywistego wykorzystania bazy słowników ze względu na obecność słownika ogólnego! – Batrickparry

+0

Skutecznie, tak. –

+0

Dzięki Adam .. :) – Batrickparry

0

Właśnie skończyłem konwersja starego DictionaryBase klasy, która była do IXmlSerializable generic Dictionary(string, string).

Najbardziej bolesne jest to, że różnica dla generycznego Dictionary<string, string>, gdy zgłoszę this[key] o klucz, który nie istnieje, pojawia się wyjątek informujący klucz nie istnieje.

Na DictionaryBase otrzymuję z powrotem null bez wyjątku. Było to w moim przypadku bolesne, ponieważ system był pełen kodu, który nie sprawdzał, czy słownik ContainsKey próbuje uzyskać wartości kluczy. To było bardziej bolesne, zakładając, że coś zepsułem serializacją.

Powiązane problemy