Delegați — RexDac Academy

RexDac AcademyNote tehnice · Ajută să ai câteva noțiuni de bază
0%Note publicate citite · pe acest dispozitiv

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:

Evenimente