Лучший способ выяснить, что вам следует делать, это посмотреть на классы в .NET Framework и посмотреть, как они спроектированы.
Методы - это «делатели» или «действия», в то время как вы можете видеть события как механизмы уведомления. То есть, если другие могут быть заинтересованы в получении уведомления о том, что что-то происходит в объекте, вы можете вызвать событие и иметь одного или нескольких подписчиков на эти события.
Поскольку события в .NET являются многоадресными, что означает, что несколько объектов могут подписываться и, следовательно, получать уведомления о происходящем событии, это может быть другой причиной для вызова события в ваших объектах. События также следуют шаблону наблюдателя в том смысле, что субъект (ваш класс) действительно не знает о подписчиках (слабо связанных). Хотя для вызова метода у вторичного объекта должна быть ссылка на экземпляр вашего класса.
Обратите внимание, что метод в вашем классе в конечном итоге вызывает и событие. Допустим, у вас есть метод в вашем классе с именем ChangePicture. Затем в реализации метода вы можете в конечном итоге вызвать событие PictureChanged. если кто-то заинтересован в получении уведомления об этом событии, он может подписаться на это событие. Этот человек, как правило, не тот, кто вызвал метод для изменения картинки.
События являются делегатами. Делегаты являются объектами. События на самом деле являются MulticastDelegates (базовый класс в .NET Framework). Эти объекты в конечном итоге вызывают метод, который вызывается как часть уведомления о событии. Так что они немного «тяжелее», чем просто вызов метода, но это почти никогда не должно определять ваш дизайн.