[ Pobierz całość w formacie PDF ]
static) w C# i w C++, a współdzielonymi (ang. shared) w VB. Nie tylko pola mogą być
statyczne, ale również metody i właściwości.
W poniższym przykładzie pokazano, w jaki sposób definiuje się składowe współdzielone
w VB.
Zarówno zmienna , jak i metoda , zwracająca wartość tej
zmiennej, są współdzielone przez wszystkie obiekty klasy . Ponieważ metoda
należy do klasy, możemy ją wywołać poprzedzając nazwę metody nazwą klasy, a nie
obiektu.
Można to odczytać następująco: pobierz wartość stopy procentowej z klasy .
Ponieważ składowe współdzielone należą do klasy (nie są wywoływane z jakiegoś
obiektu tej klasy) nie jest w nich dostępna referencja czy też .
Definiowanie struktur
W .NET struktury są podobne do klas, ale różni je jedna istotna cecha. Klasy to typy re-
ferencyjne, podczas gdy struktury to typy bezpośrednie. Struktury mogą zawierać takie
76 VIsuaI StudIo .NET: .NET Framework. Czarna ksIęga
same składowe jak klasy (metody, pola, właściwości i zdarzenia), ale przy zachowaniu
pewnych ograniczeń, wymienionych już w części Teoria .
W języku Visual Basic struktury definiuje się za pomocą słowa kluczowego ,
jak to pokazano poniżej.
Natomiast w C# struktury definiuje się za pomocą słowa kluczowego .
W nadzorowanym kodzie C++ definicja struktury wygląda nieco inaczej, a mianowicie
używa się słowa kluczowego . W standardowym języku C++ jedyną różnicą
między strukturami a klasami jest domyślna widoczność składowych. Definicja klasy
lub struktury w nadzorowanym kodzie C++, zawierająca słowo kluczowe oznacza
strukturę właściwą dla .NET (typ bezpośredni). Klasy i struktury zdefiniowane za pomocą
RozdzIał 2. ModeI programowanIa w środowIsku .NET 77
słowa kluczowego podlegają tym samym ograniczeniom co typy bezpośrednie.
Przykład definicji struktury właściwej dla .NET:
Konstruktory i destruktory w VB
Do inicjalizacji i finalizacji obiektów w języku VB używa się metod i
. Gdy tworzy się egzemplarz klasy, wywoływana jest metoda .
Może mieć argumenty i być przeciążona. W poniższym przykładzie do nowo tworzonego
obiektu typu (samochód) przekazywana jest marka samochodu.
Metoda ma w przykładzie jeden parametr typu . Podczas tworzenia obiektu
klasy w metodzie przekazywany jest napis zawierający markę samochodu. Po
zdefiniowaniu drugiego konstruktora mającego dwa parametry (marka i model), metoda
będzie przeciążona.
Kompilator na podstawie liczby argumentów jest w stanie określić, który konstruktor
ma być wywołany.
Należy pamiętać, że konstruktor wywoływany jest zawsze w momencie tworzenia nowego
egzemplarza obiektu. Jeżeli więc nie zdefiniowano w klasie metody , kompi-
lator wygeneruje pusty konstruktor dla tej klasy.
Klasa może również zawierać metodę pełniącą rolę finalizatora, czyli me-
tody wywoływanej wówczas, gdy obiekt jest usuwany z pamięci przez program zarzą-
dzający pamięcią dynamiczną. Pamiętajmy, że nie wiadomo, kiedy i czy w ogóle obiekt
zostanie usunięty z pamięci. Z tego powodu nie należy umieszczać w metodzie
78 VIsuaI StudIo .NET: .NET Framework. Czarna ksIęga
kodu, który powinien być wywołany w jakimś określonym momencie czy też który po-
winien być w ogóle wykonany.
Ponadto, ponieważ metoda jest bezargumentowa z definicji, nie może
być przeciążona.
Sprzątanie po obiektach .NET
Wszystkie obiekty .NET, niezależnie od tego, w jakim języku zostały zaimplementowa-
ne, dziedziczą po klasie bazowej metodę . Metoda ta jest wy-
woływana, gdy program zarządzający pamięcią dynamiczną postanowi ostatecznie
usunąć obiekt z pamięci. Z tego powodu można by przypuszczać, że ta metoda to dobre
miejsce do posprzątania po obiekcie i zwolnienia zajmowanych przez niego zasobów.
Jest jeden problem finalizacja w .NET jest niedeterministyczna. Innymi słowy, nie wia-
domo kiedy finalizator zostanie wykonany. Co więcej, program dynamicznie zarządzający
pamięcią może nie zostać użyty do usunięcia obiektów podczas kończenia aplikacji.
W takiej sytuacji finalizator nie zostanie w ogóle wywołany. Oznacza to, że operacje sprzą-
tające po obiekcie, które powinny być wykonane w jakimś określonym momencie
na przykład zapisanie rekordów w tabeli bazodanowej nie powinny być wykonywane
w finalizatorze.
Zalecanym rozwiązaniem jest zaimplementowanie interfejsu zawierającego
jedną metodę , którą klienci obiektu powinni wywołać, gdy kończą korzystanie
z obiektu. W metodzie tej obiekt powinien po sobie posprzątać i zaznaczyć, że nie nale-
ży już z niego korzystać. W praktyce oznacza to, że należy ustawić znacznik, który po-
winien być badany w każdej metodzie obiektu. Jeżeli jest ustawiony, metoda powinna
zakończyć się niepowodzeniem i zgłosić błąd. Jeżeli obiekt po sobie posprzątał , nie
ma znaczenia, kiedy i czy w ogóle zostanie usunięty z pamięci.
Korzystanie z dziedziczenia
Do zdefiniowania relacji dziedziczenia między dwiema klasami używa się w VB słowa
kluczowego .
Instrukcja może pojawić się tylko w klasie i musi wystąpić w pierwszym wierszu
kodu definicji tej klasy (wcześniej mogą wystąpić tylko wiersze puste oraz zawierające tylko
komentarz). Bezpośrednio po słowie występuje nazwa klasy bazowej. Zgodnie
z modelem obiektowym .NET, może wystąpić tylko jedna klasa bazowa. W kodzie klasy
można odwołać się do klasy bazowej za pomocą słowa kluczowego .
Jeżeli w klasie zdefiniowano konstruktor, w pierwszym jego wierszu musi znajdować
się wywołanie konstruktora klasy bazowej, czyli , jak to pokazano poniżej.
RozdzIał 2. ModeI programowanIa w środowIsku .NET 79
Przesłanianie metod
Klasa pochodna dziedziczy po klasie bazowej metody w niej zdefiniowane.
W takiej sytuacji możliwe są cztery scenariusze.
1. W klasie pochodnej po prostu korzysta się z odziedziczonej metody.
2. W klasie pochodnej zdefiniowana jest metoda przesłaniająca odziedziczoną
metodę w celu zmiany odziedziczonego zachowania. Metoda przesłaniająca
musi mieć taką samą sygnaturę, jak metoda w klasie bazowej.
3. Klasa pochodna musi przesłonić odziedziczoną metodę, gdyż metoda ta w klasie
bazowej nie ma ciała.
4. Klasie pochodnej nie wolno przesłonić odziedziczonej metody.
Do obsługi trzech ostatnich scenariuszy wprowadzono w Visual Basicu trzy nowe słowa
kluczowe.
[ Pobierz całość w formacie PDF ]