16
Mar
08

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.


3 Odpowiedzi to “Po pierwsze – używaj właściwości”


  1. 2 listopada, 2009 o 5:09 pm

    Podstawowa zasada. Nie używaj pól publicznych! :)

  2. 2 Dedloo
    6 listopada, 2009 o 10:14 pm

    Przecież nie używa, a właściwości zawsze są publiczne..

  3. 3 Jarek
    14 kwietnia, 2010 o 9:05 am

    W C++ też można http://jarekprzygodzki.wordpress.com/2009/06/04/wlasciwosci-w-c/
    @Dedloo
    Właściwości nie zawsze są publiczne


Dodaj komentarz


Marzec 2008
Pon W Śr Czw Pt S N
 12
3456789
10111213141516
17181920212223
24252627282930
31  

Strony