два из многих решений 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[#])&
Ваша коллекция делегатов в примере указывает на ряд анонимных методов. Делегат - это «просто указатель на метод». Не имеет значения, указывает ли он на реальный метод или на анонимный метод.
См. http://msdn.microsoft.com/en-us/library/0yw3tz5k (VS.80) .aspx
Да, это анонимные делегаты (или, точнее, делегаты, вызывающие анонимный метод ).
Не существует такой вещи, как «анонимный делегат» (или, скорее, это не признанный термин в спецификации C # или любой другой связанной с .NET спецификации, о которой я знаю).
Существуют анонимные функции, которые включают анонимные методы и лямбда-выражения.
Ваш код показывает простые старые анонимные методы - хотя они используют одну особенность, которой у лямбда-выражений нет: способность вообще не выражать параметры, когда вы их не используете. мне наплевать на них.
Да. К анонимным делегатам нельзя обращаться напрямую по имени, поэтому использование синтаксиса delegate () {}
означает, что они анонимны.
Они являются делегатами анонимных методы. Это один из способов создания анонимных методов, который был доступен с .NET 2.0. В .NET 3.0 вы также можете использовать лямбда-выражения, которые проще писать (но компилировать с тем же кодом). Я полагаю, это то, что вы имели в виду под «методами анонимной мыши». Но на самом деле это одно и то же.
Верно, вы назначили событию несколько анонимных методов.
Если вы используете более новую версию 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();
}
}