[ Pobierz całość w formacie PDF ]
rejestrują się w obiekcie generującym zdarzenia. Następnie wywoływana jest metoda po-
wiadamiająca klientów o zajściu zdarzenia. W kolejnym kroku jeden z klientów wyreje-
strowuje się. W wyniku powtórnego wywołania metody generującej zdarzenia, tylko jeden
klient zostanie powiadomiony.
Jak dołączyć atrybuty do klas i składowych?
Większość atrybutów używanych w .NET jest niewidoczna dla programistów. Atrybuty
te są tworzone przez kompilator, który umieszcza je w metadanych w pliku wykony-
walnym, a korzysta z nich CLR. Istnieją jednak w .NET standardowe atrybuty, które
mogą być stosowane przez programistów. Większość tych atrybutów umożliwia współ-
pracę .NET z COM. Tabela 2.4 zawiera standardowe atrybuty występujące w .NET.
TabeIa 2.4. Standardowe atrybuty platformy .NET
Atrybut PrzeznaczenIe atrybutu
Stosowany do atrybutów wskazuje, do których elementów klasy atrybut może być
zastosowany.
Stosowany do metod umożliwia warunkowe dołączenie metody do klasy.
Stosowany do składowych wskazuje, że składowa jest przestarzała. Kompilator
wygeneruje ostrzeżenie lub zgłosi błąd, jeżeli składowa ta zostanie użyta.
Stosowany do klas i interfejsów umożliwia podanie GUID dla klasy lub interfejsu
współpracującego z COM.
Stosowany do parametrów wskazuje, że dany parametr to parametr w znaczeniu
używanym w COM.
Stosowany do parametrów wskazuje, że dany parametr to parametr w znaczeniu
używanym w COM.
Stosowany do klas i struktur wskazuje, że klasa lub struktura podlega serializacji.
Stosowany do pól klasy podlegającej serializacji wskazuje, że pole nie podlega
serializacji.
W poniższym przykładzie pokazano sposób użycia atrybutu w języku C#.
RozdzIał 2. ModeI programowanIa w środowIsku .NET 97
Atrybuty podaje się w nawiasie kwadratowym bezpośrednio przed elementem, do któ-
rego się odnoszą. W podanym przykładzie atrybut odnosi się do metody
i oznacza, że metoda ta ma być skompilowana tylko wówczas, gdy sym-
bol jest zdefiniowany. Do danego elementu może odnosić się więcej niż jeden
atrybut. W takiej sytuacji wymieniamy je kolejno, rozdzielajÄ…c przecinkami.
Nazwy wszystkich atrybutów kończą się słowem , co ma zapobiec konfliktom
nazw, ale można to słowo pominąć. Na przykład, w celu odwołania się do atrybutu
można podać nazwę lub .
Atrybuty mogą mieć argumenty pozycyjne (ang. positional) i nazwane (ang. named).
Jak sugerują te określenia, argumenty pozycyjne identyfikowane są pozycją na liście
argumentów, a argumenty nazwane zapisuje się w postaci nazwa argumentu = wartość
argumentu . Przykład:
Powyższy atrybut ma dwa argumenty pozycyjne i jeden argument nazwany. Argumenty
nazwane mogą wystąpić tylko na końcu listy argumentów, stosowane są dla elementów
opcjonalnych.
W języku Visual Basic atrybuty podaje się w nawiasie ostrokątnym bezpośrednio przed
elementem, do którego się odnoszą. Przykładem niech będzie atrybut , który
wskazuje, że metoda jest usługą Web Service.
Z kolei w języku C++, tak jak w C#, atrybuty podaje się w nawiasie kwadratowym, co
pokazano w poniższym przykładzie. Taka notacja stosowana była również w języku IDL
do zapisu atrybutów COM.
Jak definiuje się atrybuty użytkownika?
Atrybuty użytkownika (ang. custom attribute) mogą być stosowane zarówno w C++,
C#, jak i w VB. Należy pamiętać, że atrybuty są reprezentowane przez klasy, więc mogą
mieć swoje pola i składowe.
98 VIsuaI StudIo .NET: .NET Framework. Czarna ksIęga
Atrybuty mogą mieć parametry, które dzielą się na dwie kategorie. Parametry pozycyjne
identyfikowane są pozycją na liście argumentów, natomiast parametry nazwane identy-
fikowane są nazwami. Należy pamiętać, że parametry pozycyjne muszą wystąpić przed
parametrami nazwanymi. Parametry pozycyjne definiuje siÄ™ w konstruktorach klasy re-
prezentującej atrybut, a parametry nazwane poprzez właściwości takiej klasy.
Klasa w VB reprezentująca atrybut użytkownika musi być pochodną klasy
oraz musi zawierać atrybut wskazujący, gdzie atrybut użytkow-
nika może wystąpić. Atrybut ma jeden parametr, którym może być war-
tość typu wyliczeniowego . Wartości tego typu opisano w tabeli 2.5.
TabeIa 2.5. Wartości typu AttributeTargets wskazujące, gdzie może być użyty atrybut użytkownika
Wartość OpIs
Atrybut może być zastosowany wszędzie.
Atrybut może być zastosowany do podzespołu.
Atrybut może być zastosowany do klasy.
Atrybut może być zastosowany do konstruktora.
Atrybut może być zastosowany do delegacji.
Atrybut może być zastosowany do typu wyliczeniowego.
Atrybut może być zastosowany do zdarzenia.
Atrybut może być zastosowany do pola.
Atrybut może być zastosowany do interfejsu.
Atrybut może być zastosowany do metody.
Atrybut może być zastosowany do modułu.
Atrybut może być zastosowany do parametru.
Atrybut może być zastosowany do właściwości.
Atrybut może być zastosowany do wartości zwracanej z metody.
Atrybut może być zastosowany do typu bezpośredniego.
W przykładzie pokazanym poniżej zdefiniowano atrybut o nazwie zawierający
jeden parametr pozycyjny ( ) i jeden parametr nazwany ( ). Atrybut ten może
być zastosowany do klas.
RozdzIał 2. ModeI programowanIa w środowIsku .NET 99
Jak widać, atrybut jest klasą pochodną klasy , a do zdefiniowania
parametrów użyto konstruktora i właściwości. Zdefiniowany atrybut może być zastoso-
wany do klasy w VB w sposób następujący:
W języku C++ do zdefiniowania atrybutu użytkownika stosowane są klasy nadzorowa-
ne i struktury opatrzone atrybutem . Nie muszą one być podklasami klasy
, co pokazano poniżej.
Jeżeli atrybut ten ma być stosowany w innych podzespołach, to klasa tego atrybutu mu-
si być publiczna. Wartością argumentu musi być wartość typu wyliczeniowego
, który przedstawiono już w tabeli 2.5. Do zdefiniowania pa-
rametrów pozycyjnych używane są konstruktory klasy reprezentującej atrybut, a do zde-
finiowania parametrów nazwanych pola i właściwości. Poniżej pokazano definicję
atrybutu w języku C++.
Atrybut ten może być zastosowany w sposób następujący:
100 VIsuaI StudIo .NET: .NET Framework. Czarna ksIęga
Ponieważ jest parametrem nazwanym, jego wartość musi być poprzedzona nazwą
parametru i musi on wystąpić na końcu listy argumentów.
Atrybuty w C# definiuje się podobnie, ale istnieją pewne różnice.
[ Pobierz całość w formacie PDF ]