Зачем нужно событие если есть делегат?
Так событие и есть делегат, только с дополнительными свойствами из которых самое важное, что вызвать его можно только из класса, где он обьявлен.
Если оставить делегаты как анонимные методы в стороне, то события и делегаты соотносятся как свойства и поля.
1. Событие — это свойство с методами "add" и "remove".
2. Вызов свойства доступен только изнутри класса.
3. Событие может быть как обёрткой над полем-делегатом (аналог автосвойства), так и хранить ссылки на делегаты в какой-то другой форме и вообще содержать любую дополнительную логику.
4. Событие может быть виртуальным и т.п.