Делегат - клас, в якому зберігається функція. В визначення делегата входить прототип функцій, які можуть бути представлені цим делегатом. При оголошенні змінної типу делегата вказується функція, тип якої сумісний з типом делегата. Після цього делегат можна використовувати для виклику зазначеної функції. Зазвичай делегати використовуються для реалізації зворотних викликів. Зворотний виклик, виклик функції A функції B, переданої в якості параметра функції A. Зворотні виклики часто застосовуються для передачі функції інформації про вироблених її діях.
Оголошення делегата може розташовуватися всередині або поза будь-якого класу і схоже на оголошення функції, але з додаванням до початку ключового слова delegate. Для оголошення делегата використовується наступний синтаксис:
delegate тип делегат(аргументи);
Можливість оголошення делегата поза будь-якого класу пов'язана з тим, що на основі рядка оголошення делегата компілятор фактичні генерує оголошення класу, похідного від MulticastDelegate.
Для створення делегата необхідно визначити змінну типу делегата і за допомогою ключового слова new викликати конструктор делегата, передавши йому в якості параметра ім'я функції, яка зберігатиметься в делегате.
делегат змінна=new делегат(объект.метод);
Для виклику делегата вказується ім'я змінної типу делегата, а потім у круглих дужках перераховуються через кому параметри, які слід передати функції, що викликається через об'єкт делегата.
В основі механізму обробки подій лежать делегати, тому, перш ніж оголосити подія, необхідно оголосити делегат. Оголошення події схоже на оголошення змінної типу делегата, але з додаванням до початку ключового слова event. Для оголошення події використовується наступний синтаксис:
event делегат подія;
Щоб згенерувати (порушити) подія, вказується ім'я події, а потім у круглих дужках перераховуються через кому параметри події. Перш ніж порушувати подія, рекомендується перевірити, не дорівнює чи null змінна, що описує подія.
Для підписки на подія для будь-якого об'єкта використовується оператор +=, після якого за допомогою ключового слова new викликається конструктор делегата, як параметр якого вказується назва методу, що представляє з себе обробник подій.
объект.событие+=new делегат(метод);