Делегат: ожидаемая погрешность Имени метода

Я пытаюсь получить следующую простую работу Делегата в качестве примера. Согласно книге я взял его от него, должен быть в порядке, но я получаю 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());

        }
    }
}

Какая-либо справка?

14
задан pistacchio 22 February 2010 в 08:41
поделиться

6 ответов

Удалите ():

D code = new D(x.ToString);

Вы хотите указать метод, а не выполнить его.

33
ответ дан 1 December 2019 в 06:48
поделиться

Думаю, вы имеете в виду:

D code = new D(x.ToString);

Обратите внимание на отсутствие скобок. В скобках это был вызов метода , т.е. вы пытались выполнить x.ToString () в этой строке кода. Без скобок это группа методов - выражение, которое указывает компилятору смотреть на доступные методы с этим именем (в этом контексте) именно с целью создания делегатов.

Какую книгу вы используете? Если в приведенных примерах действительно есть скобки, вы можете отправить автору электронное письмо (или, по крайней мере, проверить страницу с ошибками в книге). Если это C # in Depth, я пойду и заплачу в угол ...

6
ответ дан 1 December 2019 в 06:48
поделиться

Вам нужно передать метод в конструктор делегата.

x.ToString()

- это не метод, а строка. Использование

D code = new D(x.ToString); 
3
ответ дан 1 December 2019 в 06:48
поделиться

Попробуйте снять скобки с конца метода, вы передаете метод, поэтому скобки использовать не нужно.

0
ответ дан 1 December 2019 в 06:48
поделиться
 Код D = новый D (x.ToString); // Обратите внимание на: () 
 

Вам необходимо передать метод, который будет выполняться в делегате. Вы передаете значение вместо сигнатуры функции.

0
ответ дан 1 December 2019 в 06:48
поделиться

Должно быть:

D code = new D(x.ToString);
0
ответ дан 1 December 2019 в 06:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: