Delegát (programování)

Delegát je třída , která  vám umožňuje uložit odkaz na metodu se specifickým podpisem (pořadí a typy přijatých a návratových hodnot) libovolné třídy. [1] [2] [3] [4] . Instance delegátů obsahují odkazy na konkrétní metody konkrétních tříd.

Delegáti se používají zejména k definování prototypu funkce zpětného volání , jako například v modelu událostí .NET Framework .

Delegáti v C#

Popis

Z deklarace typu delegáta kompilátor vygeneruje třídu , která je odvozena z System.MulticastDelegate. Takže podpis funkce , která bere delegáta jako argument, může vypadat takto:

public MyFunction ( Delegovat dalšíFunction );

Další funkcí delegátů je, že je lze volat asynchronně pomocí BeginInvoke(). V tomto případě je vybrán volný fond vláken a zadaná funkce se provádí paralelně v jeho kontextu. Je však třeba poznamenat, že počet vláken ve fondu je omezený (v současné implementaci .NET je jich 25) a zbytek hovorů bude čekat, až na ně přijde řada.

Příklad deklarování a použití delegáta

pomocí System ; // Delegace deklarace delegát void MyDelegate ( string a ); class DelegateExample { static void Func ( string param ) { Console . WriteLine ( "Funkce volaná s parametrem {0}." , param ); } public static void Main () { // Instantiate MyDelegate delegát f = new MyDelegate ( Func ); // Volání funkce f ( "ahoj" ); } }

Příklad vypíše do konzole řádek "Byla volána funkce s parametrem hello.".

Poznámky

  1. Delegates (A Guide to C# Programming) Archived 6. září 2011 na Wayback Machine “ v knihovně MSDN
  2. Stránka " Delegát - třída Archivováno 6. září 2011 na Wayback Machine " v knihovně MSDN
  3. Stránka „ MulticastDelegate – Class Archived 24. prosince 2011 na Wayback Machine “ v knihovně MSDN
  4. Delegáti a události Archivováno 17. srpna 2011 na Wayback Machine // Alexey Dubovtsev, RSDN Magazine #4-2004, 03/26/2005.