Я пытаюсь получить следующую простую работу Делегата в качестве примера. Согласно книге я взял его от него, должен быть в порядке, но я получаю a Method name expected
ошибка.
namespace TestConsoleApp
{
class Program
{
private delegate string D();
static void Main(string[] args)
{
int x = 1;
D code = new D(x.ToString());
}
}
}
Какая-либо справка?
Удалите ():
D code = new D(x.ToString);
Вы хотите указать метод, а не выполнить его.
Думаю, вы имеете в виду:
D code = new D(x.ToString);
Обратите внимание на отсутствие скобок. В скобках это был вызов метода , т.е. вы пытались выполнить x.ToString ()
в этой строке кода. Без скобок это группа методов - выражение, которое указывает компилятору смотреть на доступные методы с этим именем (в этом контексте) именно с целью создания делегатов.
Какую книгу вы используете? Если в приведенных примерах действительно есть скобки, вы можете отправить автору электронное письмо (или, по крайней мере, проверить страницу с ошибками в книге). Если это C # in Depth, я пойду и заплачу в угол ...
Вам нужно передать метод в конструктор делегата.
x.ToString()
- это не метод, а строка. Использование
D code = new D(x.ToString);
Попробуйте снять скобки с конца метода, вы передаете метод, поэтому скобки использовать не нужно.
Код D = новый D (x.ToString); // Обратите внимание на: ()
Вам необходимо передать метод, который будет выполняться в делегате. Вы передаете значение вместо сигнатуры функции.