[ Pobierz całość w formacie PDF ]

jak to pokazano poniżej.
86 VIsuaI StudIo .NET: .NET Framework. Czarna ksIęga
Z obiektów implementujących interfejs korzysta się w C# w bardzo podobny sposób.
Najważniejszy wiersz, w którym zmiennej przypisywana jest zmienna , został wy-
różniony. Ponieważ zmienne oraz są zmiennymi referencyjnymi określonych typów,
w trakcie wykonywania tej instrukcji następuje sprawdzenie, czy zmienna może wskazy-
wać na ten sam obiekt, na który wskazuje zmienna . Sprawdzenie to zakończy się po-
wodzeniem tylko wtedy, gdy obiekt implementuje interfejs .
W sytuacji, gdy chcemy sprawdzić, czy obiekt implementuje na przykład interfejs ,
należy zastosować operator .
Zadaniem tego operatora jest sprawdzenie, czy obiekt wskazywany przez zmienną refe-
rencyjną implementuje podany interfejs. Jeżeli tak, wynikiem będzie wartość
i można dokonać rzutowania wartości zmiennej referencyjnej na typ , a następnie
użyć tej zmiennej.
Inny sposób wykonania tego sprawdzenia i rzutowania wartości zmiennej polega na użyciu
operatora .
Operator dokonuje sprawdzenia i rzutowania wartości zmiennej. Jeżeli zmienna nie
jest określonego typu, wartością wyrażenia z operatorem jest .
Definiowanie i używanie delegacji
Z delegacji można korzystać we wszystkich językach platformy .NET. W pierwszym
przykładzie pokażemy stosowanie delegacji w VB, następnie w C# i na końcu w C++.
W przykładach będziemy korzystać z klasy, której obiekt może informować swoich klien-
tów, że wydarzyło się coś interesującego. Ten prosty model pozwoli nam pokazać, w jaki
sposób delegacje mogą być zastosowane w realizacji stylu programowania przypominają-
cego obsługę zdarzeń. Zaczniemy od klasy , której obiekt może być użyty
do powiadamiania klientów, gdy coś się wydarzy.
RozdzIał 2. ModeI programowanIa w środowIsku .NET 87
W wyróżnionym wierszu znajduje się definicja delegacji o nazwie , która ma jeden
parametr typu i nie zwraca żadnej wartości. Klienci, którzy chcą być powiadamiani,
wywołują metodę przekazując jako argument referencję do metody, która będzie
wywoływana przez delegację. Referencja ta jest zapamiętywana w tablicy dynamicznej
będącej obiektem klasy . Ta klasa to jeden ze standardowych typów kolekcji
zdefiniowanych w przestrzeni nazw .
W metodzie tworzony jest enumerator , który pozwala przejść przez elementy
obiektu . W pętli wywoływana jest metoda , wykonująca przejście do
następnego elementu i metoda , zwracająca bieżący element. Wynik metody
jest typu . Za pomocą funkcji jest on rzutowany na typ i przypisy-
wany zmiennej . Następnie wywoływana jest metoda wskazywana przez zmienną ,
a jako argument przekazywany jest napis Komunikat.
Wywołanie metody wskazywanej przez zmienną to zwrotne wywołanie metody reali-
zowanej przez klienta. Obiekt klasy nie  wie , jakiego typu jest klient,
 wie tylko, że klient przekazał delegację, która pełni rolę pośrednika między obiektem
a klientem. Jak widać, wywołanie delegacji wygląda tak samo, jak wywołanie zwykłej
funkcji. W nawiasach po nazwie delegacji występują argumenty, które zostaną przeka-
zane do metody wskazywanej przez delegację.
W jaki sposób klienci korzystają z klasy ? Klient musi zawierać metodę,
którą zwrotnie będzie wywoływała delegacja. Metoda ta musi mieć sygnaturę taką, jak
podano w definicji delegacji. W naszym przykładzie musi mieć jeden argument o typie
i nie może zwracać żadnej wartości.
88 VIsuaI StudIo .NET: .NET Framework. Czarna ksIęga
Jak zdefiniować współpracę klienta i klasy ? Poniżej pokazano kod, który
to realizuje.
Po utworzeniu obiektu klienta można utworzyć delegację, do której przekazywany jest adres
funkcji wywoływanej zwrotnie. Do tego celu używane jest słowo kluczowe .
W rezultacie wywołanie delegacji spowoduje wywołanie metody
z obiektu .
Utworzona i zainicjalizowana delegacja musi być przekazana do obiektu klasy
, do czego używana jest metoda . Obiekt dodaje otrzymaną delegację do swo-
jej listy. Wreszcie wywoływana jest metoda z obiektu , co powoduje zwrotne
wywołanie metod zarejestrowanych klientów.
A oto definicja klasy w C#:
RozdzIał 2. ModeI programowanIa w środowIsku .NET 89
Jak widać, kody w C# i w VB wyglądają niemal identycznie. W klasie zapisanej w C#
również korzysta się z kolekcji w celu przechowania referencji do delegacji
oraz z enumeratora do przejścia przez elementy tej kolekcji.
W klasie nie ma żadnych niespodzianek. Zawiera ona jedynie definicję metody,
która będzie zwrotnie wywołana przez delegację.
Po zdefiniowaniu tej metody można utworzyć i wywołać delegację.
Pierwszą czynnością wykonywaną w programie jest utworzenie obiektu klasy .
Najważniejsze rzeczy  jeśli chodzi o delegację  dzieją się w drugim wierszu. Tam
tworzona jest nowa delegacja oraz kojarzona z metodą z obiektu .
Wykonanie delegacji spowoduje zwrotne wywołanie metody z obiektu .
Delegacje mogą być również stosowane w kodzie nadzorowanym C++, jak to pokazano
w poniższym przykładzie.
90 VIsuaI StudIo .NET: .NET Framework. Czarna ksIęga
Do zdefiniowania delegacji w kodzie nadzorowanym C++ używane jest słowo kluczowe [ Pobierz całość w formacie PDF ]
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • fopke.keep.pl