Имеется следующий блок кода :
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.
Поэтому этот код компилируется успешно.
Комментариев нет:
Отправить комментарий