Вы можете создать экземпляр делегата несколькими различными способами:
Использование лямбда-выражения C # 3:
Func<int> getFive = () => 5;
Использование C #2 Синтаксис анонимного метода:
Func<int> getFive = delegate { return 5 };
Использование неанонимного метода (доступно с C # 1):
int GetFive()
{
return 5;
}
…
Func<int> getFive = GetFive;
Я думаю, что каждый
Синтаксис delegate { }
имеет то преимущество, что вам не нужно объявлять параметры, если они вам не нужны.
Лямбда-выражения очень лаконичны иможет быть переведен в выражения вместо делегатов, что очень полезно для LINQ-to-some-DB и означает, что вы можете использовать тот же синтаксис для запроса структур и баз данных в памяти.
Использование неанонимных методовозначает, что вы можете легко использовать их повторно, а также подходит для длинных методов.
Все приведенные выше случаи переведены в эквивалентный код.Единственная разница в том, является ли метод видимым для вас.
И лямбда-выражения, и анонимные методы также могут быть замыканиями, то есть они могут захватывать локальные переменные.