Ответ 1
Удалите():
D code = new D(x.ToString);
Вы хотите указать метод, а не выполнить.
Я пытаюсь использовать следующий простой пример делегирования. Согласно книге, которую я взял с нее, должно быть хорошо, но я получаю ошибку 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()
в этой строке кода. Без скобок это группа методов - выражение, которое сообщает компилятору посмотреть доступные методы с этим именем (в этом контексте) именно с целью создания делегатов.
Какую книгу вы используете? Если в примерах, которые он показывает, есть скобки, вы можете отправить письмо автору (или, по крайней мере, проверить страницу ошибок в книге). Если это С# в глубине, я пойду и заплачу в углу...
Вам нужно передать метод в конструктор делегата.
x.ToString()
не метод, а строка. Используйте
D code = new D(x.ToString);
Попробуйте взять скобки с конца метода, вы передаете метод, поэтому не нужно использовать скобки.
D code = new D(x.ToString); // Note the: ()
Вам нужен pas метод, который должен быть выполнен в делегате. То, что вы делаете, передает значение вместо сигнатуры функции.
Должно быть:
D code = new D(x.ToString);