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):

metody w ICollection

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):

Właściwości w IList

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

metody w IList

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>)

dziedziczenie w interfejsach kolekcji C#

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

generyczne kolekcje i ich odpowiedniki niegeneryczne

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