1) Эти описания звучат довольно точно для меня. Иногда анонимным методам и лямбда-выражениям потребуется создать новый тип для помещения цели делегата, чтобы они могли действовать как замыкания .
2/3) Я бы немного прочитал, пока вы не будете довольны делегатами, анонимными методами и лямбда-выражениями. Я посвящаю главу связанным с делегатами изменениям в каждом из C # 2.0 и C # 3.0 в C # в глубине, хотя, конечно, и другие книги также подробно описываются. У меня есть статья , если это поможет.
Что касается примеров - делегаты используются для самых разных целей. Это разные взгляды на одну и ту же функциональность, но они могут чувствовать очень разными:
- Предоставление кода для вызова при запуске нового потока
- Реакция на события пользовательского интерфейса
- Предоставление фильтра, выбора, упорядочения и т. Д. Для запроса LINQ
- Предоставление обратного вызова для завершения асинхронной операции
Если у вас есть какие-то конкретные ситуации, которые вы хотите привести в качестве примера, вам будет легче ответить.
РЕДАКТИРОВАТЬ: Я должен отметить, что это хорошая новость, что вы в настоящее время работаете только с LINQ to Objects и LINQ to XML, поскольку это означает, что вам еще не нужно понимать деревья выражений. (Они крутые, но по одному шагу за раз ...) LINQ to XML - это на самом деле просто XML API, который прекрасно работает с LINQ - насколько я помню, единственные случаи, когда вы будете использовать делегатов с LINQ to XML, это когда вы на самом деле звоните в LINQ to Objects. (Это очень приятно сделать, правда, но это означает, что вы можете повторно использовать то, что вы уже узнали.)
Поскольку у вас уже есть C # в глубине, главы 10 и 11 предоставляют довольно много примеров с использованием лямбда-выражений (и выражений запросов, которые переводятся в лямбда-выражения) в LINQ. В главе 5 приведено несколько разных примеров использования делегатов.