Delegaty w języku C#

Delegata - referencja do funkcji.


Delegacje to obiekty, w których wywołujemy inne funkcje (przechowujemy referencje do funkcji). Delegacje możemy porównać do wskaźników do funkcji w języku C++. Delegacja jest funkcją, która nie ma ciała, ale może wywoływać ciała innych funkcji, przewagą nad wskaźnikami jest to, że nie można referować się do metody, której sygnatura nie odpowiada sygnaturze delegaty. Metoda musi mieć zgodną sygnaturę, co oznacza że musi przyjmować takie same argumenty i zwracać taki sam typ, jaki podaliśmy w deklaracji delegaty.

Ogólna składnia deklaracji delegaty:

[modyfikatory]  delegate  typ  Identyfikator   ([lista_argumentów]);
gdzie:
  • modyfikatory - dostępne modyfikatory to: new, public, private, protected, internal (opcjonalne),
  • typ - typ danych zwracanych przez metodę (wymagane, nie może zwracać void),
  • identyfikator - nazwa delegaty - musi być różna od nazwy klasy (wymagane),
  • lista_argumentów - argumenty przekazywane przez delegatę do metody (opcjonalne).

Przykładowy kod korzystający z delegaty:

class Delegaty
{
    public delegate int Delegata1(int arg1, int arg2);
 
    public int Dodawanie(int arg1, int arg2)
    {
        return arg1 + arg2;
    }
 
    public int Odejmowanie(int arg1, int arg2)
    {
        return arg1 - arg2;
    }
}
 
class Program
{
    static void Main()
    {
        Delegaty d = new Delegaty();
 
        Delegaty.Delegata1 dodawanie = new Delegaty.Delegata1(d.Dodawanie);
        int wynikDodawania = dodawanie(2, 2);
        System.Console.WriteLine("Wynik dodawania: {0}.", wynikDodawania.ToString());
 
        Delegaty.Delegata1 odejmowanie = new Delegaty.Delegata1(d.Odejmowanie);
        int wynikOdejmowania = dodawanie(2, 2);
        System.Console.WriteLine("Wynik odejmowania: {0}.", wynikOdejmowania.ToString());
    }
}

Delegaty złożone

Do delegaty można przypisać kilka funkcji, wówczas podczas wywołania delegata, wywołane zostaną wszystkie te funkcje, które zostały do niego przypisane. Do przypisywania funkcji służy operator: "+=", zaś do usuwania służy operator: "-=".

Przykład przypisania funkcji do delagata:

odejmowanie += d.Dodawanie;
odejmowanie -= d.Dodawanie;

Więcej informacji na temat delegatów:

http://msdn.microsoft.com/pl-pl/library/ms173171.aspx
Komentarze facebook (polub nasz profil na FB aby je zobaczyć):