Archiwum dla marzec 16th, 2008

16
mar

Po pierwsze - używaj właściwości

Język C# ma sporą przewagę nad C++ i część z tych mechanizmów języka będę się starał opisywać co jakiś czas w kolejnych notkach. Tym razem coś co usprawni naszą pracę z klasami - atrybuty/właściwości/properties. Mechanizm ten był w C++ wykorzystywany na około - poprzez metody dostępu tzw settery i gettery a wyglądało to mniej więcej tak:

class tmp
{
private: int var;
public:
int getVar() const;
void setVar( int newVar );
};

Klasa używała metod aby udostępnić wewnętrzne zmienne i jednocześnie zachować enkalpsulację. Czyli praktycznie po dwie metody dla każdej zmiennej składowej co przy sporych rozmiarów obiekcie dawało niezliczoną ilość niepotrzebnych i robiących zamieszanie metod. Język C# rozwiązuje to tak:

public class tmp
{
private int var;
public int Var
{
get { return var; }
set { var = value; }
}
};

Jak widać zachowujemy enkapsulację a jednocześnie nie musimy pisać dodatkowych metod. Oprócz tego mamy tak samo jak w C++ możliwość, aby niejako zabronić zewnętrznego odczytu bądź zapisu danej zmiennej - wystarczy nie udostępniać get lub set we właściwości. Atrybuty są bardzo wygodne i sprawiają, że kod je wykorzystujący jest znacznie bardziej czytelny.

Poza opisanymi wyżej zaletami, są jeszcze inne. Przykładem jest mechanizm bardzo skojarzony z atrybutami, mianowicie są to indeksery. Możemy dzięki temu zapewnić dostęp do obiektu poprzez indeks jak do tablicy. Co więcej, może to być dostęp do zwykłej tablicy jak i do słownika:

public int this [ int index ]
{
get { return array[ index ] ; }
set { array[ index ] = value; }
}

Przy czym jak już wspominałem - zmienną indeksującą może być także typ string, wtedy mamy słownik.

Mam nadzieję, że udało mi się przybliżyć właściwości w klasach C# i zachęcić do ich używania.