Delegat - obiekt, który "wie" jak wywołać metodę. W C++ podobną właściwość pełni wskaźnik do funkcji. Potocznie też można powiedzieć, że jest to szkielet metody jak powinna ona wyglądać. Mówiąc szczegółowiej: posiada typy parametrów metody oraz jej typ zwrotny.
delegate int Transformer (int x);
Transformer jest zgodny z każdą metodą, która posiada typ zwrotnyint oraz jeden parametr typu int.
Posługiwanie się delegatem:
delegate int Transformer (int x);
class Test
{
static int Square (int x) => x * x;
static void Main()
{
Transformer t = Square; // jest to skrócony zapis: Transformer t = new Transformer(Square);
int result = t(3); // t(3) skrócony zapis: t.Invoke(3)
Console.WriteLine(result); // Wyświetli 9
}
}
Delegaty posiadają zdolność multiemisji, czyli egzemplarz delegatu może się odnosić nie tylko do jednej funkcji. Łączenie delegatów wykonuje się za pomocą + i +=. A usuwanie - i -=. W skrócie jeśli wywołamy delegat nastąpi wywołanie wszystkich metod po kolei w jakiej zostały dodane. Jeśli delegat ma inny zwrotny niż void, wywołujący otrzymuje wartość zwrotną ostatniej wywołanej metody. Jednak wartości zwrotne poprzednich wartości są ignorowane.
delegate int Transformer (int x);
class Test
{
static int Square (int x) => x * x;
static int GetNumber(int x) => x;
static void Main()
{
Transformer t = Square; // jest to skrócony zapis: Transformer t = new Transformer(Square);
t += GetNumber;
int result = t(3); // t(3) skrócony zapis: t.Invoke(3)
Console.WriteLine(result); // Wyświetli 3
}
}
Uwaga:
Jeśli zastosujemy operator -= do zmiennej z jedną metodą jest równoznaczne z przypisaniem wartości null do tej zmiennej.
Korzystając z serwisu akceptujesz regulamin
oraz politykę prywatności.
Używamy informacji zapisanych za pomocą plików cookies w celu zapewnienia maksymalnej wygody w korzystaniu z naszego serwisu.
Jeśli nie wyrażasz zgody, ustawienia dotyczące plików cookies możesz zmienić w swojej przeglądarce.
Delegat - obiekt, który "wie" jak wywołać metodę. W C++ podobną właściwość pełni wskaźnik do funkcji. Potocznie też można powiedzieć, że jest to szkielet metody jak powinna ona wyglądać. Mówiąc szczegółowiej: posiada typy parametrów metody oraz jej typ zwrotny.
Transformer jest zgodny z każdą metodą, która posiada typ zwrotny int oraz jeden parametr typu int.
Posługiwanie się delegatem:
Delegaty posiadają zdolność multiemisji, czyli egzemplarz delegatu może się odnosić nie tylko do jednej funkcji. Łączenie delegatów wykonuje się za pomocą + i +=. A usuwanie - i -=. W skrócie jeśli wywołamy delegat nastąpi wywołanie wszystkich metod po kolei w jakiej zostały dodane. Jeśli delegat ma inny zwrotny niż void, wywołujący otrzymuje wartość zwrotną ostatniej wywołanej metody. Jednak wartości zwrotne poprzednich wartości są ignorowane.
Uwaga:
Jeśli zastosujemy operator -= do zmiennej z jedną metodą jest równoznaczne z przypisaniem wartości null do tej zmiennej.