Delegáty v jazyce C# představují datový typ, který slouží k uchování odkazu na metodu se specifickou signaturou (hlavičkou metody). Umožňují volat metody nepřímo, aniž by se přímo uváděl jejich název ve zdrojovém kódu. Jsou bezpečné vůči typům, protože lze přiřadit pouze metody se stejným návratovým typem a parametry, jaké definuje delegát.
Delegáty podporují vícenásobné přiřazení metod, čímž vzniká multicast delegát, který při vyvolání postupně spustí všechny přiřazené metody. Často se používají při implementaci událostí (events), callbacků nebo vzorů typu publish-subscribe.
V jazyce C# existují i vestavěné generické delegáty jako Action, Func nebo Predicate, které usnadňují práci s delegáty bez nutnosti vytvářet vlastní definice. Delegáty zvyšují flexibilitu kódu, ale mohou s sebou nést i mírnou režii oproti přímému volání metod.
Typy delegátů
Delegáty lze rozdělit do dvou kategorií:
Vlastní (programátorem definované) delegáty
Systémové (vestavěné) delegáty
Vlastní delegáty
Definuje se pomocí klíčového slova delegate:
public delegate void PrintMessage(string message);