Nivelul 6 — Elemente generice și delegați
Delegați
Note originale de SunDiaL · Vezi sursa în engleză
Am menționat pe scurt în secțiunea despre operanzi cum operațiile însele pot deveni operanzi. Delegații ne permit exact acest lucru. Cu ei, poți trata funcțiile ca pe valori: le atribui variabilelor, le transmiți mai departe și le apelezi ulterior. Spun „delegați”, dar sunt de fapt două lucruri distincte.
Tipul delegat
Tipul delegat, după cum sugerează numele, este tipul. La fel ca în cazul claselor, trebuie mai întâi să îi comunici calculatorului că acest tip există și să descrii cum arată. Aceasta este o instrucțiune declarativă, iar sintaxa este ReturnType + DelegateName + Parameters. Un fel de semnătură, dar nu chiar aceeași semnătură.
public delegate void Writer(string message);
Notă: delegații au aceiași modificatori de acces ca clasele.
Delegatul
Delegatul este variabila. Singura diferență față de alte variabile este că păstrează funcții care corespund cerințelor tipului delegat.
Un delegat poate păstra mai multe funcții.
public void Main()
{
Writer log = Console.WriteLine; //Notice the absence of "()". myDelegateName is not
//assigned the result of WriteLine, it is assigned the
//function itself.
log += File.WriteLine; //Notice the "+=". Multiple functions can be added
// (or removed with -=) to the same delegate.
log("Hello world"); //actual function call. This calls both Console.WriteLine()
//and File.WriteLine()
}
Notă: un delegat poate fi suprascris, ceea ce ne duce la subiectul următor: