C# Зачем нужны делегаты?

Где они используются?

На сколько я знаю они используются при реализации событийно-ориентированного программирования, в том же классе EventHandler, когда в коде генерируется события и различные обработчики подписываются на них.
Кроме этого они ещё используются при создании новых потоков, в новом потоке нужно запустить отдельные метода а для этого используется делегат: ThreadStart или ParameterizedThreadStart.
Если посмотреть ещё детальнее, то думаю можно найти ещё много мест где они используются в C#.

Понятно)