Delegates
Delegates sunt folositi cand avem nevoie de actiuni dinamice. De exemplu, in codul de mai jos, avem un delegate
pentru o actiune care ia un int ca si parametru. In aplicatia de baza noi putem crea o metoda
care are ca parametru delegatul pe care l-am creat noi. Acum, faza faina e ca eu pot apela metoda
asta cu orice instanta de delegat fara sa modific restul codului. Eu doar construiesc o noua instanta de
delegat noua si in rest ea isi facea treaba. E ca si cum ia-si da o actiune ca parametru.
Totodata, se mai poate si adauga unui instante de delegat, functiile unei alte instante ale aceluiasi delegat.
De exemplu, in exemplul de mai jos putem face ff+=ff2. Dupa ce se va apela DoWork(ff), ambele metode vor fi apelate, atat cea de la ff cat si cea de la ff2.
In cazul in care un delegate returneaza ceva (de exemplu public delegate int Worker(int a);), rezultatul apelarii functiei delegatului in cazul in care combinam
mai multe instante, va fi tot timpul rezultatul ultimei instante de delegat(in cazul asta ar fi rezultatul de la ff2);
Exista si delegates direct din .NET Framework cum ar fi EventHandler, Action<T>, Function<T, Tresult>
- Action<T> - delegate care doar ia ca parametru ceva si nu returneaza nimic
- Function<T, TRESULT> - delegate care doar ia ca parametru ceva si returneaza o valoare
class Program
{
public delegate void Worker(int a);
static void Main(string[] args)
{
Worker ff = new Worker(FaceCeva);
Worker ff2 = new Worker(FaceCevaAltfel);
Fa(ff);
Console.ReadKey();
}
public static void Fa(Worker worker)
{
worker(4);
}
public static void FaceCeva(int a)
{
Console.WriteLine("face ceva "+a);
}
public static void FaceCevaAltfel(int a)
{
Console.WriteLine("face ceva altfel cu "+a);
}
}