Когда вы говорите «они используются, если вы не хотите, чтобы вызвать метод непосредственно, а не слева место для пользовательской реализации», вы делаете меня думать, что вы не можете полностью понять разницу между простым делегатом и событием. Путь упрощения здесь, но вот краткое объяснение ...
Делегаты - это способ позволить кому-то, кто пишет код с помощью вашего кода, предоставить свой собственный метод. Таким образом, они не проходят через насос сообщений и не синхронно и т. Д.
События используют делегата, чтобы предоставить вам возможность ввести свой собственный код для ответа на событие. События проходят через насос сообщений и подходят, когда есть что-то, на что вам нужно ответить, что может происходить в другом месте. Однако они будут происходить за пределами пути выполнения исполняемого кода.
К счастью, большинству людей кажется, когда нужно использовать тот или иной инстинкт. Опять же, грубое упрощение здесь, но, надеюсь, достаточно для дальнейшего чтения.