Delegát je dátový typ (ako napríklad object alebo Int32) ktorý odkazuje na metódu. Akonáhle je delegátu priradená nejaká metóda správa sa presne ako akákoľvek iná metóda v rámci objektu. Používa sa najmä v spojitosti s eventami. Príklad. Máš na formulári Button objekt a potrebuješ aby nejakým spôsobom reagoval na kliknutie (dajme tomu, že potrebuješ otvoriť dialógové okno na uloženie súboru). Čo spravíš v kóde je
Kód:
mybutton.Click += new EventHandler(myDelegate);//myDelegate nie je nič iné len metóda ktorú si naprogramuješ
//keď užívateľ klikne na Button otvorí sa "Uložit" dialógové okno
private void myDelegate(sender object, EventArgs e)
{
SaveFileDialog saveFileDialog1 = new SaveFileDialog();
saveFileDialog1.ShowDialog();
}
Je to vlastne spôsob ako "pripájať" nový kód do už existujúceho.
Medzi prvým a druhým kusom kódu nie je v konečnom dôsledku žiadny rozdiel. Akonáhle je metóda Pis definovaná ako
Kód:
public static void Pis(){}
tak sa jednoducho zavolá pri volaní metódy
Kód:
Thread.Start();
pretože prvý parameter triedy Thread je definovaný ako delegát a ty mu len priraďuješ najakú hodnotu (ako premennej - len hodnotou tej premennej je adresa metódy)