Страницы

Поиск по вопросам

четверг, 16 мая 2019 г.

C# делегаты и анонимные функции

Имеется следующий блок кода :
delegate int StrMod(int a); static void main() { StrMod strmod = delegate{return 10;}; Console.WriteLine(strmod(5)); }
Консоль:
10
Почему на 4 строку компилятор не ругается? Ведь входные параметры анонимной функции не соответствуют параметрам делегата.


Ответ

Вы здесь объявляете делегат с помощью анонимного метода.
StrMod strmod = delegate{return 10;};
Согласно документации об анонимных методах, у анонимного метода допускается опускать список параметров, если они вам не нужны внутри метода(в отличии от лямбд выражений, где список параметров нужно указывать всегда явно). В этом случае, анонимный метод может быть преобразован к делегату с различной сигнатурой.
Anonymous methods enable you to omit the parameter list. This means that an anonymous method can be converted to delegates with a variety of signatures.
Поэтому этот код компилируется успешно.

Комментариев нет:

Отправить комментарий