Когда следует использовать анонимные методы при определении делегата и когда следует использовать формально определенные методы при определении делегата?
Определение делегата C# — анонимные методы против формально определенных методов
Ответы (2)
Если вам нужно использовать одну и ту же логику более чем в одном месте, имеет смысл использовать отдельный метод.
Если вам нужно использовать логику только один раз, и она довольно короткая, имеет смысл использовать анонимную функцию. Если делегату требуется доступ к локальным переменным в методе, который его создает, анонимные функции действуют как замыкания, что также может быть очень удобно.
Кроме того, анонимная функция может быть полезна, даже если она достаточно длинная, если она используется для чего-то вроде распараллеливания с помощью Parallel Extensions — часть этого заключается в том, что вы можете взять существующий последовательный код и в значительной степени распараллелить его «на месте».
Вы также можете рассмотреть возможность тестирования — если код вашего делегата достаточно сложен, чтобы он требовал собственных модульных тестов, представление его как метода имеет большой смысл. (К сожалению, это должен быть либо внутренний метод, использующий InternalsVisibleTo
, либо общедоступный метод, хотя часто вы хотели бы, чтобы он был закрытым, но такова жизнь.)
Я использую анонимные методы, когда функция, которая должна выполняться, должна выполняться только этим делегатом (другими словами: когда мне не нужна эта функция в каком-либо другом месте), и когда функция/метод, который должен быть выполнен, относительно короткий (максимум 5 строк).
Но нет строгих правил, определяющих, когда что использовать.
ИМХО, я считаю, что анонимные методы не способствуют удобочитаемости в большинстве ситуаций, поэтому я в основном их не использую.