Это звучит разумно для меня, но я не могу избавиться от мучительного чувства, что это плохая практика, по той простой причине, что я всегда сталкиваюсь с вопросом: «Почему бы не выполнить действия, которые вы»d предоставить в обработчике события код, который вызывает событие? "
Чтобы ответить на этот вопрос, рассмотрим частичные сценарии классов.Предположим, у вас есть базовый тип B. Вы запускаете автоматизированный инструмент, который декорирует B, расширяя его до производного класса D. Ваш инструмент генерирует частичный класс, чтобы разработчики, использующие D, могли дополнительно настроить его для своих собственных целей.
В этом случае кажется совершенно разумным, что пользовательская сторона D захочет зарегистрироваться для вызова, когда события, объявленные B или машинная сторона D, генерируются машинной стороной D.
Это был сценарий, в котором мы оказались при проектировании ВСТО много лет назад.Как оказалось, это не было сложно сделать в C #, но было довольно сложно заставить все это работать в VB.Я полагаю, что VB внесла некоторые изменения в свою модель подписки на события, чтобы упростить это.
Тем не менее, если бы вы могли избежать этого, я бы сделал это.Если вы просто делаете мероприятие для внутренней подписки, которое кажется плохим запахом кода.Частичные методы в C # 3 очень помогают здесь, так как они позволяют простой и недорогой стороне, генерируемой машиной, вызывать небольшие функции уведомлений на стороне, генерируемой пользователем, без необходимости публиковать событие.