Определение делегата C # - анонимные методы против формально определенных методов - PullRequest
4 голосов
/ 12 июля 2009

Когда следует использовать анонимные методы при определении делегата и когда формально определенные методы должны использоваться при определении делегата?

Ответы [ 2 ]

11 голосов
/ 12 июля 2009

Если вам нужно использовать одну и ту же логику в нескольких местах, имеет смысл использовать отдельный метод.

Если вам нужно использовать логику только один раз и , она довольно короткая, имеет смысл использовать анонимную функцию. Если делегату требуется доступ к локальным переменным в методе, который его создает, анонимные функции действуют как замыкания, что также может быть очень удобно.

Кроме того, анонимная функция может быть полезной, даже если она достаточно длинная, если она используется для чего-то вроде распараллеливания с Parallel Extensions - отчасти это означает, что вы можете взять существующий последовательный код и распараллелить его «на месте» в большая степень.

Возможно, вы также захотите рассмотреть тестируемость - если код вашего делегата достаточно сложен, что требует собственных модульных тестов, его использование в качестве метода имеет большой смысл. (К сожалению, это должен быть либо внутренний метод, использующий InternalsVisibleTo, либо публичный метод, где обычно вы хотите, чтобы он был закрытым, но такова жизнь.)

5 голосов
/ 12 июля 2009

Я использую анонимные методы, когда функция, которая должна быть выполнена, должна выполняться только этим делегатом (другими словами: когда мне не нужна эта функция в каком-либо другом месте) и когда функция / метод, быть выполненным относительно коротким (максимум 5 строк).

Но нет строгих правил, определяющих, когда что использовать.
ИМХО, я считаю, что анонимные методы не способствуют удобочитаемости в большинстве ситуаций, поэтому я в основном их не использую.

...