Я использую ваш подход, кроме одной детали. Я думаю, что события должны быть подписаны, когда вы создаете новый экземпляр подписчика или theObject, это делает код более прямым. Таким образом, все, что вам нужно, - это просто внимательно следить за правильной утилизацией предметов (для этого удобно утилизировать паттен).
Вы упомянули, что используете стороннее событие, это означает, что вы не можете предоставить собственную реализацию методов добавления / удаления, как вам было рекомендовано. Но в ваших собственных классах с вашими собственными событиями вы должны определить собственную реализацию методов добавления / удаления для события, чтобы решить вашу проблему.