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.
Podstawowa zasada. Nie używaj pól publicznych! :)
Przecież nie używa, a właściwości zawsze są publiczne..
W C++ też można http://jarekprzygodzki.wordpress.com/2009/06/04/wlasciwosci-w-c/
@Dedloo
Właściwości nie zawsze są publiczne