Interfejsy kolekcji generycznych w języku C#
Interfejsy kolekcji generycznych - wspólne dla różnych typów.
Interfejs IDictionary<TKey, TValue> - Słownik
Kolekcja
IDictionary działa podobnie do
HashTable, ma tylko jedną zasadniczą różnice - jest to kolekcja generyczna a więc musimy podać typ przechowywanych danych. Musimy podać
typ klucza oraz
typ wartości przechowywanych w słowniku. HashTable pozwalało na dodanie dowolnego typu do kolekcji.
Słowniki są szybsze od kolekcji HashTable, ponieważ nie wykonują pakowania do obiektów - typ danych jest określony a więc nie ma potrzeby. Aby korzystać ze słowników w trybie
Thread Safety należy użyć słownika
ConcurrentDictionary <TKey, TValue> zamiast Dictionary<TKey, TValue>.
Więcej informacji na temat kolekcji Dictionary:
http://msdn.microsoft.com/pl-pl/library/xfhwa508.aspx
Interfejs IEnumerable<T>
Kolekcja
IEnumerable<T> jest to najbardziej podstawowa
kolekcja tylko do odczytu. Pozwala na użycie pętli
foreach.
Nie pozwala dodawać, usuwać czy modyfikować elementów kolekcji.
Parametr kolekcji jest kowariantny - można użyć określonego typu lub typu pochodnego. IEnumerable<T> ma jedną zasadnicza wadę, w przypadku gdy chcemy pobrać tylko jeden element kolekcji jesteśmy zmuszeni pobierać wszystkie elementy od początku aż do interesującego nas elementu. Przykładowo aby pobrać element nr 3 musimy pobrać także elementy 1 i 2.
IEnumerable<T> pozwala na odczyt danych dopiero w momencie w którym są one potrzebne. Nie wymaga pobierania całej kolekcji od razu. Na temat tej kolekcji i zwracania danych będzie mowa w kolejnych rozdziałach.
Więcej informacji na temat Interfejsu ICollection<>:
http://msdn.microsoft.com/pl-pl/library/9eekhta0.aspx
Interfejs ICollection<>
Kolekcja
ICollection<T> jest to kolekcja dziedzicząca po
IEnumerable<T>. W przeciwieństwie do IEnumerable<T>pozwala
dodawać oraz usuwać elementy kolekcji. Wykorzystywana jest w Entity Framework do opisu relacji pomiędzy tabelami. W przeciwieństwie do
IList<T> nie posiada indeksów i
nie pozwala na zarządzanie kolejnością elementów.
Metody dostępne w ICollection<T> (Rys. 2.10):

Więcej informacji na temat Interfejsu ICollection<>:
http://msdn.microsoft.com/pl-pl/library/92t2ye13.aspx
Interfejs IList<>
Kolekcja
IList<T> dziedziczy po
ICollection<T> oraz
IEnumerable<T>. W porównaniu do ICollection<T>
pozwala na manipulowanie danymi poprzez indeks przez co
możemy zarządzać kolejnością elementów w kolekcji i ją sortować.
Właściwości dostępne w kolekcji IList<T> (Rys. 2.11):

Metody dostępne w IList<T> (Rys. 2.12):

Więcej informacji na temat Interfejsu IList<>:
http://msdn.microsoft.com/pl-pl/library/5y536ey6.aspx
Interfejs IQueryable<>
Kolekcja
IQueryable jest częścią przestrzeni nazw
System.Linq. Jest
bardzo podobna do IEnumerable<T> jednak ma jedną zasadnicza różnicę -
nie pobiera tak jak IEnumerable<T> elementów kolekcji po kolei, pobiera tylko te dane, które spełniają nasze warunki. Jeśli chcemy pobrać pracowników z bazy danych, którzy zarabiają więcej niż np. 4000zł, w przypadku IEnumerable pobralibyśmy wszystkich pracowników a następnie wybrali tych którzy zarabiają więcej niż 4000zł.
IQueryable<T> pobierze natomiast tylko tych pracowników, którzy zarabiają więcej niż 4000 zł. Przy większych kolekcjach daje to kolosalną różnicę w wydajności. Należy tutaj zauważyć, że
IQueryable jest przeznaczone tylko
do zewnętrznych źródeł danych takich jak web serwisy czy bazy danych i jest częścią LINQ, natomiast
IEnumerable służy do operowania na danych już pobranych i przetrzymywanych w pamięci. IQueryable korzysta z zapytań SQL, natomiast IEnumerable pobiera wszystkie dane a dopiero później wybiera te, które nas interesują. W przypadku zewnętrznych źródeł danych jest to nie do przyjęcia. Więcej informacji na temat działania IQueryable w kolejnych rozdziałach.
Więcej informacji na temat Interfejsu IQueryable<>:
http://msdn.microsoft.com/pl-pl/library/bb351562.aspx
Hierarchia dziedziczenia (Rys. 2.13):
(Czytamy z góry na dół a więc: ICollection<T> dziedziczy po IEnumerable<T>)

Tabela odpowiedników kolekcji generycznych do kolekcji niegenerycznych (Rys. 2.14):

Komentarze facebook (polub nasz profil na FB aby je zobaczyć):