Delegacje w C#
Zdziwiłem się ostatnio trochę, bo jakiekolwiek materiały o delegacjach (”typie” delegate) w C# albo ciężko znaleźć, albo są szczątkowe. W książkach raczej się tego tematu nie porusza - a jeśli już, to kompletnie niezrozumiale, wszelkie tutoriale w sieci o delegate raczej nie wspominają. A, jak się okazuje, delegacje mogą się okazać cudowną zabawką.
Czym zatem są delegacje?
To nic innego, jak wskaźniki do funkcji. Taką definicję podaje przynajmniej dokumentacja MSDN:
A delegate declaration defines a reference type that can be used to encapsulate a method with a specific signature. A delegate instance encapsulates a static or an instance method. Delegates are roughly similar to function pointers in C++; however, delegates are type-safe and secure.
Dodatkowo spotkałem się jeszcze z takim stwierdzeniem:
C# delegate is a callback function.
Sama deklaracja delegacji jest banalna (umieszczana poza deklaracja funkcji):
public delegate object delegacja(typ zmienna)
Jest to niejako szkielet funkcji, do której delegacja będzie wskazywać - lista i typy parametrow MUSZĄ się zgadzać. A wskazywać można zarówno na metody statyczne (przez ich bezpośrednie podanie), bądź na metody publiczne, ale wymaga to wtedy przekazania również instancji.
O działaniu w praktyce można przeczytać tu: link
Natomiast tu przykład (moja interpretacja zagadnienia), który całkowicie powinien rozwiać wszelkie wątpliwości (Project z VS C# Express 2005)

10przykazan.com
“Ciężko znaleźć”? Zaglądnij na www.google.com
http://libsigc.sourceforge.net/libsigc2/docs/manual/html/ch02s03.html
http://www.boost.org/libs/libraries.htm#Function-objects
Type-safe and secure.
W 2.0 są już pełne domknięcia na delegatach:
http://joe.truemesh.com/blog/000390.html
i porównanie do bloków Rubiego. A w 3.0 indukcja typów i definiowanie funkcji jak w camlu.