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