ArXen42
@ArXen42

Является ли плохим тоном использование не EventHandler как типа делегата события?

Часто использую события в коде игры (под Unity3d, если быть точным, но в основном в коде, отвязанном от движка/сцены). После прочтения Рихтера честно использовал EventHandler, но ничего, кроме загромождения кода мне это не принесло. Изменил на Action, стало чище, проблем не заметил.
В CLR via C# использование EventHandler с его костыльным приведением sender'а и заглушкой EventArgs.Empty обосновывалось тем, что это общепринято и не вынуждает плодить делегаты. С первым не поспоришь, но второе уже много лет как неактуально в связи с введением generic делегатов, в т.ч. и встроенных Action. При необходимости первым аргументом можно поставить типизированный sender (что явно чище, чем Object sender), а если нужно что-то передать, то вторым аргументом будет либо один аргумент передаваемого типа, если нужно передать экземпляр одного типа, либо данные, упакованные в наследника EventArgs, если их много.

Меньше boilerplate кода, типобезопасность. Что я делаю не так?

Конечно, имеется ввиду использование во внутренней логике приложения, не зависящей от каких-нибудь сотен событий из WinForms/WPF/etc.

P.S. удивлен, что этот довольно распространенный вопрос задавался на большом количестве англоязычных, но его нет на тостере) Интересно мнение местной аудитории.
  • Вопрос задан
  • 227 просмотров
Решения вопроса 1
Возможно вы немного удивитесь, но использовать события вообще не желательно=)
Поскольку очень легко забыть отписатся от события, а это необходимо чтобы не было утечки. А если вы и не забыли, то очень часто нужны будуть костыли в виде кеширования объекта к которому подписались для дальнейшей отписки... Плюс проблемы с лямбдами. Я стараюсь заменять их на IObservable из Reactive Extensions for .Net.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы