C# - Анонимный делегат

два из многих решений Mathematica (хотя! встроено и эффективен):

(* returns pure function *)
(FixedPoint[(If[#[[2]]>1,{#[[1]]*#[[2]],#[[2]]-1},#])&,{1,n}][[1]])&

(* not using built-in, returns pure function, don't use: might build 1..n list *)
(Times @@ Range[#])&
17
задан user160677 17 November 2009 в 13:01
поделиться

6 ответов

Ваша коллекция делегатов в примере указывает на ряд анонимных методов. Делегат - это «просто указатель на метод». Не имеет значения, указывает ли он на реальный метод или на анонимный метод.

См. http://msdn.microsoft.com/en-us/library/0yw3tz5k (VS.80) .aspx

19
ответ дан 30 November 2019 в 10:31
поделиться

Да, это анонимные делегаты (или, точнее, делегаты, вызывающие анонимный метод ).

2
ответ дан 30 November 2019 в 10:31
поделиться

Не существует такой вещи, как «анонимный делегат» (или, скорее, это не признанный термин в спецификации C # или любой другой связанной с .NET спецификации, о которой я знаю).

Существуют анонимные функции, которые включают анонимные методы и лямбда-выражения.

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

23
ответ дан 30 November 2019 в 10:31
поделиться

Да. К анонимным делегатам нельзя обращаться напрямую по имени, поэтому использование синтаксиса delegate () {} означает, что они анонимны.

2
ответ дан 30 November 2019 в 10:31
поделиться

Они являются делегатами анонимных методы. Это один из способов создания анонимных методов, который был доступен с .NET 2.0. В .NET 3.0 вы также можете использовать лямбда-выражения, которые проще писать (но компилировать с тем же кодом). Я полагаю, это то, что вы имели в виду под «методами анонимной мыши». Но на самом деле это одно и то же.

1
ответ дан 30 November 2019 в 10:31
поделиться

Верно, вы назначили событию несколько анонимных методов.

Если вы используете более новую версию C #, вы также можете сделать нечто подобное с лямбда-выражениями. например:

class DelegateTest
{
    public event Action del;

    public void Chaining()
    {
        del += () => Console.WriteLine("Hello World");
        del += () => Console.WriteLine("Good Things");
        del += () => Console.WriteLine("Wonderful World");
        del();
    }
}
4
ответ дан 30 November 2019 в 10:31
поделиться
Другие вопросы по тегам:

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