Делегат: ожидаемая ошибка имени метода

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

        }
    }
}

Любая помощь?

Ответы

Ответ 1

Удалите():

D code = new D(x.ToString);

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

Ответ 2

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

D code = new D(x.ToString);

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

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

Ответ 3

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

x.ToString()

не метод, а строка. Используйте

D code = new D(x.ToString); 

Ответ 4

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

Ответ 5

D code = new D(x.ToString);   // Note the: ()

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

Ответ 6

Должно быть:

D code = new D(x.ToString);