MySQL Java JavaScript PHP Python HTML-CSS C-sharp

Metode anonime

Cu delegații sunt strâns legate metodele anonime. Metodele anonime sunt utilizate pentru a crea instanțe de delegați.

Definirea metodelor anonime începe cu cuvântul cheie delegate, după care urmează în paranteze lista de parametri și corpul metodei în acolade:

delegate(parametri)
{
   // instrucțiuni
}

De exemplu:

MessageHandler handler = delegate (string mes)
{
   Console.WriteLine(mes);
};
handler("hello world!");

delegate void MessageHandler(string message);

Metoda anonimă nu poate exista de una singură, ea este utilizată pentru inițializarea unei instanțe de delegat, ca în acest caz variabila handler reprezintă o metodă anonimă. Și prin această variabilă delegat se poate apela metoda anonimă.

Un alt exemplu de metode anonime este transmiterea ca argument pentru un parametru care reprezintă un delegat:

ShowMessage("hello!", delegate (string mes)
{
   Console.WriteLine(mes);
});

static void ShowMessage(string message, MessageHandler handler)
{
   handler(message);
}

delegate void MessageHandler(string message);

Dacă metoda anonimă utilizează parametri, atunci aceștia trebuie să corespundă parametrilor delegatului. Dacă pentru metoda anonimă nu sunt necesari parametri, atunci parantezele cu parametri sunt omise.

Astfel, chiar dacă delegatul primește mai mulți parametri, în metoda anonimă se pot omite complet parametrii:

MessageHandler handler = delegate
{
   Console.WriteLine("metoda anonimă");
};
handler("hello world!");    // metoda anonimă

delegate void MessageHandler(string message);

Deci, dacă metoda anonimă conține parametri, aceștia trebuie să corespundă parametrilor delegatului. Sau metoda anonimă poate să nu conțină deloc parametri, caz în care corespunde oricărui delegat care are același tip de valoare returnată.

Parametrii metodei anonime nu pot fi omisi, dacă unul sau mai mulți parametri sunt definiți cu modificatorul out.

De asemenea, la fel ca metodele obișnuite, metodele anonime pot returna un rezultat:

Operation operation = delegate (int x, int y)
{
   return x + y;
};
int result = operation(4, 5);
Console.WriteLine(result);       // 9

delegate int Operation(int x, int y);

Metoda anonimă are acces la toate variabilele definite în codul exterior:

int z = 8;
Operation operation = delegate (int x, int y)
{
   return x + y + z;
};
int result = operation(4, 5);
Console.WriteLine(result);       // 17

delegate int Operation(int x, int y);

În ce situații se utilizează metodele anonime? Când trebuie să definim o acțiune unică, care nu are multe instrucțiuni și nu este utilizată în altă parte. În special, ele pot fi utilizate pentru gestionarea evenimentelor, care vor fi discutate mai departe.

← Lecția anterioară Lecția următoare →