Ваши два варианта в основном одинаковы, так что вы можете свободно выбирать предпочтительный вкус синтаксического сахара.В обоих случаях есть сигнатура функции обратного вызова, определенная в некотором типе (класс или интерфейс в первом случае, тип делегата во втором случае) и ссылка на объект (переданная явно в первом случае или связанная в экземпляре делегата).во втором случае).
У Microsoft есть некоторые рекомендации относительно того, когда вы можете выбрать одно из другого: https://msdn.microsoft.com/library/2e759bdf-7ca4-4005-8597-af92edf6d8f0
Одна веская причина выбрать объектную ссылку / интерфейс вместо обратного вызоваявляется то, что вы знаете, что определенно собираетесь вызвать несколько обратных вызовов на родителя.Имеет смысл передать одну ссылку, реализующую интерфейс, который определяет все эти обратные вызовы, вместо того, чтобы создавать группы экземпляров делегатов и передавать их все вместе.
И наоборот, если вы знаете, что собираетесьхотеть несколько различных реализаций обратного вызова для одного объекта, например.поскольку вы хотите по-разному реагировать на обратный вызов, вызываемый различными дочерними элементами, может иметь больше смысла использовать указатели / делегаты функций, но в любом случае вы не вынуждены выбирать один из вариантов вместодругой.