[ Pobierz całość w formacie PDF ]
identyfikatora, a następnie przypisanie tego identyfikatora istniejącemu obiektowi. Od tej
chwili oba identyfikatory będą odnosić się do tego samego, nienazwanego obiektu na
stercie.
" Metodę obiektu wywołuje się podając nazwę metody z nawiasami, poprzedzoną operato-
rem kropki i nazwą obiektu. Jeśli metoda pobiera parametry, wypisuje się je w nawiasach.
" Modyfikatory dostępu określają, które metody mają dostęp do zmiennych i metod klasy.
Wszystkie składowe danej klasy są widoczne dla wszystkich metod tej klasy.
" Składowe oznaczone słowem kluczowym public są widoczne dla wszystkich metod
wszystkich klas.
" Składowe oznaczone słowem kluczowym private są widoczne tylko dla metod tej samej
klasy.
138 | Rozdział 7. Klasy i obiekty
Struktury
Chociaż struktury są typem wartościowym, to przypominają klasy, ponieważ mogą zawierać
konstruktory, właściwości, metody, pola i operatory (wszystkie omówione w niniejszej książce).
Struktury wspierają też mechanizmy indeksowania (opisane w rozdziale 12.).
Z drugiej strony, struktury nie wspierają dziedziczenia, destruktorów (rozdział 11.) ani inicjali-
zacji pól. Strukturę definiuje się niemal tak samo jak klasę:
[atrybuty] [modyfikator-dostępu] struct identyfikator [:lista-interfejsów]
{ składowe-struktury }
Struktury domyślnie wywodzą się z klasy Object (tak samo jak wszystkie typy w C#, łącznie
z typami wbudowanymi), lecz nie mogą dziedziczyć z żadnych innych klas ani ze struktur
(tak jak mogą klasy). Struktury są też domyślnie zamknięte (co znaczy, że żadna klasa ani struktu-
ra nie może po niej dziedziczyć; omówiono to w rozdziale 11.), co nie jest prawdą w przy-
padku klas.
Zaletą struktur miała być ich lekkość (wymagają mało pamięci), ale możliwości ich stosowa-
nia są tak bardzo ograniczone, a oszczędności na tyle małe, że większość programistów
prawie w ogóle ich nie używa.
Uwaga programiści C++! Struktury w C++ są identyczne z klasami (z wyjątkiem dostępności),
czego nie można powiedzieć o strukturach w C#.
" Składowe oznaczone słowem kluczowym protected są widoczne dla metod tej samej
klasy i metod od niej pochodnych.
" Konstruktor jest specjalną metodą wywoływaną podczas tworzenia nowego obiektu. Jeśli
nie zdefiniuje się żadnego konstruktora dla swojej klasy, to kompilator wywoła domyślny
konstruktor, który nic nie robi. Konstruktor domyślny to taki konstruktor, który nie pobiera
parametrów. Można tworzyć swoje własne konstruktory domyślne dla własnych klas.
" W czasie definiowania zmiennych składowych można je zainicjalizować określonymi
wartościami.
" Słowo kluczowe this odnosi się do bieżącej instancji obiektu.
" Każda niestatyczna metoda klasy ma domyślną zmienną this, która jest jej przekazywana.
" Składowe statyczne są związane z daną klasą, a nie z konkretną instancją jej typu. Skła-
dowe statyczne są deklarowane słowem kluczowym static, a wywoływane za pośred-
nictwem nazwy klasy. Metody statyczne nie mogą mieć parametru this, ponieważ nie
ma obiektu, na który mogłyby wskazywać.
" Klasy w języku C# nie wymagają destruktora, ponieważ obiekty niebędące w użyciu są
usuwane automatycznie.
" W przypadku gdy klasa korzysta z niezarządzanych zasobów, należy wywołać metodę
Dispose().
" Zmienne typu wartościowego są tworzone na stosie. Kiedy metoda kończy swoje działanie,
zmienne wychodzą poza jej zasięg i są niszczone.
" Obiekty typu referencyjnego są tworzone na stercie. W momencie deklaracji instancji typu
referencyjnego tworzona jest referencja odnosząca się do miejsca, w którym dany obiekt
znajduje się w pamięci komputera. Jeśli referencja zostanie utworzona w obrębie metody,
to po zakończeniu działania metody referencja jest usuwana. Jeśli nie ma innych referencji
odnoszących się do obiektu na stercie, to mechanizm przywracania pamięci usuwa także
sam obiekt.
Podsumowanie | 139
Pytania
Pytanie 7.1. Jaka jest różnica między klasą a obiektem?
Pytanie 7.2. Gdzie tworzone są typy referencyjne?
Pytanie 7.3. Gdzie tworzone są typy wartościowe?
Pytanie 7.4. Co oznacza słowo kluczowe private?
Pytanie 7.5. Co oznacza słowo kluczowe public?
Pytanie 7.6. Jaka metoda jest wywoływana podczas tworzenia obiektu?
Pytanie 7.7. Co to jest konstruktor domyślny?
Pytanie 7.8. Jakie typy może zwrócić konstruktor?
Pytanie 7.9. W jaki sposób inicjalizuje się wartość zmiennej składowej klasy?
Pytanie 7.10. Do czego odnosi się słowo kluczowe this?
Pytanie 7.11. Jaka jest różnica między metodą statyczną a metodą obiektu?
Pytanie 7.12. Jakie jest działanie instrukcji using?
wiczenia
wiczenie 7.1. Napisz program z klasą Math, która ma cztery metody: Add(), Subtract(),
Multiply() i Divide() (każda pobierająca dwa argumenty). W metodzie Main() program
ma wywoływać wszystkie metody.
wiczenie 7.2. Zmodyfikuj program z ćwiczenia 7.1 w taki sposób, aby niepotrzebne było
tworzenie obiektu typu Math w celu wywoływania poszczególnych metod.
140 | Rozdział 7. Klasy i obiekty
[ Pobierz całość w formacie PDF ]