A Делегат - это тип, который может инкапсулировать вызов метода. Вы должны использовать делегат, когда хотите обработать метод как объект и передать его.
Событие - это просто способ представить делегата как свойство, к которому любой код вне вашего класса может присоединить свои обработчики, но не может вызвать делегат. Если вы представляете свой делегат как открытое свойство, код за пределами вашего класса может не только присоединять их обработчики, но и вызывать делегат.
Кроме того, события также позволяют добавлять методы удаления, которые вызываются, когда к нему присоединяются \ отсоединяются обработчики, точно так же, как метод получения и установки открытого свойства, позволяющий лучше контролировать процесс.
Вам следует использовать событие, когда вы хотите, чтобы другие классы подписались на событие в вашем классе, и получать уведомления, когда это происходит.
public delegate void MyMessageHandlerType(string message);
public class EventTest
{
public event MyMessageHandlerType MessageEvent
{
add { } // invoked when MessageEvent += SomeMethod
remove { } // invoked when MessageEvent -= SomeMethod
}
}