[ Pobierz całość w formacie PDF ]

W instrukcji może wystąpić deklaracja typu wyjątku obsługiwanego przez tę in-
strukcję. Ta konstrukcja oraz sposób użycia więcej niż jednej instrukcji zostały
pokazane w poniższym przykładzie.
5
Uwaga: Klasa ta jest klasą bazową dla kilku innych, bardziej szczegółowo opisujących błędy, na przykład
wymienionych w tabeli: i  przyp. tłum.
6
Ten wyjątek jest zgłaszany przy próbie odwołania się do nieistniejącej składowej. Sytuacja taka może
wystąpić, gdy po kompilacji składowa klasy zdefiniowanej w zewnętrznym podzespole zostanie usunięta
lub przemianowana  przyp. tłum.
72 VIsuaI StudIo .NET: .NET Framework. Czarna ksIęga
Jak widać, pierwsza instrukcja pozwala przechwycić wyjątki o typie
, a druga  wszystkie pozostałe wyjątki pochodzące od klasy .
W czasie działania programu wykonywana jest pierwsza napotkana instrukcja ,
która odpowiada zgłoszonemu wyjątkowi. W podanym powyżej przykładzie zgłaszany
jest wyjątek , tak więc wykonana zostanie pierwsza instrukcja
. W rezultacie na konsoli zostanie wydrukowany następujący komunikat:
Wydruk obiektu reprezentującego wyjątek zawiera wydruk komunikatu oraz zawartości
stosu, co umożliwia zlokalizowanie miejsca zgłoszenia wyjątku.
Blok może również zawierać instrukcję , która jest wykonywana zawsze przed
wyjściem z metody, niezależnie od tego, czy wyjątek wystąpił czy też nie. Przykład:
W instrukcji obsługującej wyjątek po wypisaniu komuni-
katu znajduje się instrukcja powodująca wyjście z metody, ale nim ono nastąpi,
wykonywana jest instrukcja . Jest ona bardzo użyteczna, jeżeli przed wyjściem
z metody należy koniecznie wykonać jakieś czynności, na przykład zamknąć plik lub
odświeżyć zawartość tabel bazodanowych. Gdyby nie instrukcja , trzeba by było
zamieścić wiele wierszy skomplikowanego kodu.
Refleksja i klasa Type
W .NET można odczytać informacje o podzespole załadowanym do pamięci. Informacje
te obejmują:
listę klas zdefiniowanych w module,
RozdzIał 2. ModeI programowanIa w środowIsku .NET 73
listę metod zdefiniowanych w klasie,
nazwy i typy właściwości oraz pól,
sygnatury metod.
Zgodnie z oczekiwaniami, informacje te zawarte są w metadanych powiązanych z pod-
zespołami i klasami. Proces odczytywania tych informacji nazywany jest refleksją (ang.
reflection).
Refleksja jest zaimplementowana za pomocą przestrzeni nazw i klasy
, jest integralną częścią modelu programowania w środowisku .NET.
Refleksja, oprócz prostego odczytywania metadanych, pozwala również dynamicznie
tworzyć obiekt danego typu i wywoływać metody z tego obiektu. Jest ona mechaniz-
mem używanym przez VB do realizacji póznego wiązania (ang. late binding), którego
przykład pokazano w poniższym fragmencie kodu.
Zadeklarowana została zmienna o ogólnym typie i za jej pomocą odwołujemy
się do utworzonego obiektu. Z tego powodu kompilator VB podczas kompilacji nie ma
informacji o typieobiektu, do którego się odwołujemy, a tym samym kompilator nie może
sprawdzić, czy wywołanie metody jest dopuszczalne czy też nie. W czasie wyko-
nywania programu środowisko uruchomieniowe CLR sprawdza  używając do tego re-
fleksji  czy w obiekcie wskazywanym przez zmienną zdefiniowana jest metoda
oraz jakie ma argumenty.
Poniżej zamieszczono nieznacznie zmodyfikowany kod IL, otrzymany po kompilacji
naszego programu, wyświetlony przez deasembler . Można zobaczyć, jak zapisano
pózne wiązanie.
W przykładzie widać, że przed wywołaniem funkcji pomocniczej ła-
dowany jest napis zawierający nazwę wywoływanej funkcji . Jednym z argumentów
74 VIsuaI StudIo .NET: .NET Framework. Czarna ksIęga
podawanych przy wywołaniu funkcji jest obiekt zawie-
rający informacje o obiekcie, z którego wywoływana jest metoda .
Główne znaczenie dla realizacji refleksji ma klasa . Za pomocą refleksji można
otrzymać obiekt tej klasy dla każdego załadowanego typu. Metody, pola i właściwości
obiektu klasy pozwalają odczytać wszystkie informacje o typie reprezentowanym
przez ten obiekt, a nawet tworzyć obiekty tego typu.
W VB można otrzymać obiekt klasy poprzez użycie operatora , jak to po-
kazano poniżej.
Po pobraniu obiektu klasy , można z niego odczytać informacje o typie przez niego
reprezentowanym. Metoda zwraca tablicę obiektów opisują-
cych składowe danego typu. Zamiast niej można użyć bardziej wyspecjalizowanych
metod: , i , zwracających informacje o meto-
dach, polach i właściwościach. Każda z tych metod zwraca tablicę obiektów odpowied-
niego typu ( , , ).
Gotowe rozwiązania
Definiowanie klas
Do zdefiniowania klasy w VB używane jest słowo kluczowe .
Definicja klasy może zawierać pola (dane), metody, właściwości i zdarzenia.
Przeciążanie i przesłanianie metod
Pojęcia: przeciążanie (ang. overloading) i przesłanianie (ang. overriding) często stosowane
są zamiennie, mimo że są to dwa zupełnie różne pojęcia. Jeżeli w danej klasie występują
dwie (lub więcej) metody o takich samych nazwach, lecz różniące się listą argumentów,
mówimy, że metody te są przeciążone.
W języku VB definicja metody przeciążonej musi zawierać słowo kluczowe .
RozdzIał 2. ModeI programowanIa w środowIsku .NET 75
Zdefiniowane powyżej metody różnią się listą argumentów, są więc poprawnie
przeciążone.
W C# i w C++ definicje metod przeciążonych nie muszą zawierać specjalnych słów klu-
czowych, muszą tylko różnić się listą argumentów.
Przesłanianie ma związek z dziedziczeniem i zostanie omówione w dalszej części rozdziału,
w punkcie  Przesłanianie metod .
Definiowanie pól i metod należących do klasy
W .NET można zdefiniować składowe należące do klasy, a nie do poszczególnych obiektów
tej klasy. Rozważmy na przykład klasę reprezentującą rachunek bankowy. Każdy obiekt
klasy (rachunek bankowy) ma saldo należące tylko do tego obiektu. W klasie
może również wystąpić składowa (stopa procentowa) przecho-
wująca wartość stopy procentowej wszystkich rachunków. Wartość ta jest wspólna dla
wszystkich rachunków, nie różni się dla poszczególnych obiektów tej klasy  z tego
też powodu można powiedzieć, że zmienna przechowująca wartość stopy procentowej [ Pobierz całość w formacie PDF ]

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • mew.pev.pl