Почему делегат без параметров компилируется? - PullRequest
6 голосов
/ 21 апреля 2010

Я запутался, почему это компилируется:

    private delegate int MyDelegate(int p1, int p2);

    private void testDelegate()
    {
        MyDelegate imp = delegate 
        {
            return 1;
        };
    }

MyDelegate должен быть указателем на метод, который принимает два параметра типа int и возвращает другое значение типа int, верно?Почему мне разрешено назначать метод, который не принимает параметров?

Интересно, что он не компилируется (он жаловался на несоответствие сигнатур, как я и ожидал)

    private void testDelegate()
    {
        // Missing param
        MyDelegate imp = delegate(int p1)
        {
            return 1;
        };

        // Wrong return type
        MyDelegate imp2 = delegate(int p1, int p2)
        {
            return "String";
        };
    }

Спасибоза любую помощь!

Райан

Ответы [ 2 ]

6 голосов
/ 21 апреля 2010

Ваш первый пример - сокращенный синтаксис, если делегату не нужны параметры. Если вам нужен хотя бы один из них, вам нужно предоставить их все, поэтому первая часть второго примера не скомпилируется.

5 голосов
/ 21 апреля 2010

Ну, в первом примере компилятор может легко увидеть, что параметры не используются, и заменить несколько фиктивных переменных.

Это похоже на проектное решение, где-то на пути от уточнения всего в .NET 1, через анонимные методы в .NET 2 до лямбд в .Net 3

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...