Cześć,
W dzisiejszym poście poruszymy temat Indekserów.


Czym są i jak z nich korzystać?

Zapraszam do lektury.

Jedna z dobrych praktyk programowania obiektowego mówi, że na poziomie klasy zadeklarowane zmienne powinny być prywatne. Jeżeli wiemy że będziemy się odwoływać się do nich z kodu umieszczonego poza klasą, to powinniśmy zaimplementować publiczne właściwości, które będą na nich operować. A co w przypadku jeśli mamy tablicę zadeklarowaną na poziomie klasy?
W języku C# z pomocą przychodzą nam indeksatory (ang. indexers).

Zaimplementowanie indeksatora pozwala nam odwoływać się do tablicy w klasie po samej nazwie obiektu i indeksie. Istnieje tutaj jednak pewne ograniczenie, klasa zawierająca indeksator może mieć zadeklarowaną tylko jedną tablicę. 

Podobnie jak właściwość, indeksator musi zawierać co najmniej jeden akcesor (GET lub SET). Warto przypomnieć, że w akcesorach SET występuje niejawnie zadeklarowana zmienna przechowująca wartość przypisywaną do indeksatora.
Indeksery pozwalają na indeksowanie obiektów w taki sam sposób jak ma to miejsce w tablicach. Kiedy definiujemy indeksery dla klas, zachowuje się ona w podobny sposób do wirtualnej tablicy. Można uzyskać dostęp do instancji tej klasy przy użyciu operatora dostępu do tablicy, tj. ([]).

 

Składnia definicji jednowymiarowego indeksera:

 

Używanie indekserów

 

Deklaracje zachowania indeksera możemy porónać do właściwości. Deklarując indekser również będziemy używać properties get oraz set. Niemniej jednak, właściwość zwróci lub ustawi dane dla konkretnego elementu, podczas gdy masze indeksery mają za zadanie zwrócić lub ustawić konkretną wartość z instancji obiektu. Innymi słowy, zbiór danych zostaje podzielony na mniejsze części a indekser zwraca lub ustawia wartości dla poszczególnych elementów.

Definiowanie właściwości składa się z określenia nazwy. W przypadku indekserów nie używamy nazwy, ale słowa kluczowego this, które wskazuje na instancje obiektu.

Zwróć uwagę na poniższy przykład, który w przyjaźniejszy sposób pozwoli nam poznać działanie indekserów:

Przeciążanie indekserów

Czy Indeksery możemy przeciążąć?
Oczywiście, indeksery możemy rónież przeciążać. Indeksery mogą być również zdefiniowane z wieloma parametrami a każdy z parametrów może być innego typu. Do Indekserów nie musimy przypisywać tylko typów całkowitych. W języku C# dopuszczane jest, aby indeksery były innymi typami, np. string.

Poniższy przykład pokazuje sposób użycia indekserów przeciążonych:

 

Jak zawsze kod wrzucony będzie do GitHuba.

Podobało się? dajcie like’a 😉 lub piszcie i komentujcie.

Post Author: Csharpowe Zmagania

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

This site uses Akismet to reduce spam. Learn how your comment data is processed.