(Кроме того, трудно объяснить вещи, когда вы дважды использовали одни и те же имена типов.)
Когда вы используете открытое поле, клиенты могут не только подписываться на события - они также могут полностью удалить другие обработчики событий, назначив вместо добавления:
myClass.OnAdd = Add;
Они также могут вызвать обработчик напрямую:
myClass.OnAdd("foo");
Оба изони нарушают обычный шаблон паб / суб, где различные подписчики изолированы друг от друга.Подписчики не могут перезаписывать подписки друг друга (только добавлять или удалять свои) и не могут сами инициировать событие.
Подробнее о событиях и делегатах см. мою статью отема .