[ Pobierz całość w formacie PDF ]

kiety na Do widzenia!.
Wszystko świetnie. Ale jest tu pewien ukrywany przed programistą narzut.
Otóż powyższy kod wymaga rejestrowania delegacji (wyręcza nas w tym
stosowny kreator Visual Studio 2005), a obsługa kliknięcia przycisku wy-
maga zdefiniowania nowej metody. Całość można zaś uprościć stosując
metody anonimowe.
Aby sprawdzić, jak faktycznie rejestrowana jest metoda obsługi zdarzenia
kliknięcia przycisku, należy kliknąć w IDE przycisk Show All Files (pre-
zentowany na rysunku 1.1).
Rysunek 1.1. Przycisk Show All Files
Teraz należałoby otworzyć plik Form1.Designer.cs i odszukać w nim
delegację button1.Click:
this.button1.Click += new System.EventHandler(this.button1_Click);
Nie powinno się ręcznie modyfikować tego kodu, ale można wyeliminować
ten wiersz inaczej  wracając do formularza i klikając w oknie właści-
wości (Properties) ikonę błyskawicy, wywołującą procedury obsługi zda-
rzeń. Tam można usunąć procedurę obsługi zarejestrowaną dla zdarze-
nia Click.
Upraszczanie kodu  metody anonimowe 53
Po powrocie do kodu Form1.Designer.cs okaże się, że procedura obsługi
zdarzenia button1.Click nie jest w ogóle zarejestrowana!
Teraz należy otworzyć do edycji plik Form1.cs i dodać do konstruktora
(za wywołaniem InitializeComponent()) poniższy wiersz:
this.button1.Click += delegate { label1.Text = "Do widzenia!" };
Dzięki temu można już pozbyć się dodatkowej metody procedury obsługi
zdarzenia  można ją usunąć albo oznaczyć jako komentarz:
// private void button1_Click(object sender, EventArgs e)
// {
// label1.Text = "Do widzenia!";
// }
Działanie metody anonimowej można sprawdzić, ponownie uruchamiając
aplikację. Powinna zachowywać się dokładnie tak, jak poprzednio.
Jak widać, zamiast rejestrować delegację wywołującą metodę obsługi zda-
rzenia, można wskazać metodę anonimową  nienazwany, rozwijany
w miejscu wywołania blok kodu.
A co&
& z innymi zastosowaniami metod anonimowych? Czy można je sto-
sować we własnym kodzie?
%7ładen problem. Metody anonimowe można stosować nie tylko przy inicja-
lizowaniu delegacji, ale i wszędzie tam, gdzie dozwolone jest użycie de-
legacji  we wszystkich tych miejscach można przekazać nienazwany
blok kodu.
& jeśli w takim bloku kodu nastąpi odwołanie do zmiennej lokalnej?
Dobre pytanie. To dość myląca sytuacja i łatwo tu o pomyłkę, zwłaszcza
kiedy nie jest się w pełni świadomym konsekwencji takich odwołań. Otóż
C# pozwala na wciąganie zmiennych lokalnych do zasięgu anonimowego
bloku kodu; odwołania do nich są wykonywane w momencie wykonania
owego bloku kodu. Może to prowokować rozmaite efekty uboczne  choćby
podtrzymywanie przy życiu obiektów, którymi inaczej już dawno zaopie-
kowałby się mechanizm zbierania nieużytków.
54 Rozdział 1: C# 2.0
& z usuwaniem procedury obsługi dla zdarzenia, dodanej za pomocą
delegacji anonimowej; da się to zrobić?
Jeśli procedura obsługi zdarzenia została określona delegacją anonimo-
wą, nie można jej usunąć; dlatego delegacje anonimowe powinno się stoso-
wać jedynie dla tych procedur obsługi, które mają być trwale skojarzone
z danymi zdarzeniami.
Ponadto można stosować delegacje anonimowe również w innych dziedzi-
nach, choćby przy implementowaniu metody List.Find przyjmującej dele-
gację opisującą kryteria wyszukiwania.
Więcej informacji
W zasobach MSDN można znalezć świetny artykuł traktujący o metodach
anonimowych. Mowa o artykule  Create Elegant Code with Anonymous
Methods, Iterators and Partial Classes autorstwa Juvala Lowy ego. Warto
też zapoznać się z artykułem z serwisu ONDotnet.com (O Reilly), publiko-
wanym pod adresem http://www.ondotnet.com/pub/a/dotnet/2004/04/05/
csharpwhidbeypt1.html.
Ukrywanie kodu  typy częściowe
W poprzednich wersjach C# całość definicji klasy musiała być umieszcza-
Słowo kluczowe
partial pozwala
na w pojedynczym pliku. Teraz dzięki słowu kluczowemu partial można
na podział definicji
dzielić klasę na części przechowywane w większej liczbie plików. Moż-
klasy na wiele plików.
liwość ta jest cenna z dwóch względów:
" W zespole programistycznym można przeprowadzić podział polegający
na przypisaniu różnych programistów do prac nad różnymi częściami
klasy.
" Visual Studio 2005 może w ten sposób oddzielać kod generowany au-
tomatycznie od kodu własnego programisty.
Ukrywanie kodu  typy częściowe 55
Jak to zrobić? [ Pobierz całość w formacie PDF ]

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • sklep-zlewaki.pev.pl