Indeksery są trochę podobne do własności. Pozwalają nam one po utworzeniu obiektu indeksować go jak tablicę, czyli za pomocą operatora [ ]. Indeksery zatem są jedno i dwu wymiarowe, jak tablice. Teraz przejdziemy do ogólnej deklaracji indekserów:
specyfikator_dostepu typ_elementu this[int index]
{
get
{
….
}
set
{
….
}
}
Parametr index musi być typu int. Reszta elementów jest ci tutaj znana, jak sam widzisz są tutaj dwa akcesory get i set, zatem indeksery jak i własności mogą być też tylko do odczytu lub zapisu. Indekser nie przechowuje żadnych wartości on tylko określa miejsce przechowywania wartość. Teraz przejdziemy do krótkiego przykładu w którym to utworzymy klasę której obiekt będziemy indeksować jak tablice, z tą różnicą że w tablic będzie można zapisać wartości tylko podzielne przez trzy i tablica będzie odporna na błąd przekroczenia indeksu.
Początek kodu:
using System;
class liczby
{
int[] tab;
public liczby(int rozmiar)
{
tab = new int[rozmiar];
}
public int this[int index]
{
get
{
return tab[index];
}
set
{
if (value % 3 == 0)
{
if (index <= tab.Length – 1)
tab[index] = value;
}
}
}
public void Wyswietl_elementy() {
foreach(int x in tab){
Console.WriteLine(x);
}
}
}
class Pokaz
{
public static void Main()
{
liczby a = new liczby(10);
a[0] = 9;
a[1] = 34;
a[2] = 3;
a[3] = 7;
a[4] = 4356;
a[19] = 15;
a.Wyswietl_elementy();
}
}
Koniec kodu:
W naszym programie deklarujemy klasę o nazwie liczba w której to deklarujemy indekser, którego to akcesor set będzie zapisywał tylko liczby podzielne przez 3 oraz sprawdza czy parametr index jest zgodny z rozmiarem tablicy tab. Jak widzisz po utworzeniu obiektu możemy mieć dostęp do niego przez indeks [ ]. Widzisz że przekroczenie indeksu nie wywołuje błędu gdyż nie trafia on do tablicy. Po wyświetleniu elementów tablicy sam widzisz że nie zostały zapisane wartości nie podzielne przez trzy. W tym wypadku indekser został wykorzystany do zarządzania miejscem zapisu wartości do tablicy, tą wartość nie koniecznie trzeba zapisywać do tablicy, parametr index możesz wykorzystać do czego innego.
Jednakże głównie indekser jest wykorzystywany do kontrolowania zapisu do tablicy. Pamiętaj o tym że indekser nie przechowuje wartości on określa tylko miejsce przechowywania wartości.