Почему делает делегата без компиляции параметров?

Я смущен, почему это компилирует:

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

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

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

Интересно, они не компилируют (это жалуется на несоответствия подписи, как я ожидал бы),

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

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

Спасибо за любую справку!

Ryan

6
задан Ryan 20 April 2010 в 21:36
поделиться

2 ответа

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

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

5
ответ дан 9 December 2019 в 22:31
поделиться

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

6
ответ дан 9 December 2019 в 22:31
поделиться
Другие вопросы по тегам:

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